2013年9月29日日曜日

Android備忘録:Developer Consoleでアプリ削除はできない!

SISYOU.KUMです。
Developer Consoleでアプリをいくつか公開しているのですが、
残念なことに役目を終えて、公開を停止しているアプリがあります。

いつまでもリストに残っているのが邪魔くさいので
「一覧からアプリを削除したい!」
と思う方は多いと思います。

が、残念なことに
2013年9月29日現在ではアプリの削除はできないようです。
ということなので、私は以下の方法で回避しています。

■回避方法
公開停止中のアプリの名前を、リストの後半に表示されるように工夫する


私が公開しているアプリは
デフォルトの言語がAlphabetのものが多いので、
日本語で後半に来そうな文字「非公開」とかをアプリ名の先頭に
入れるようにしています。

こうすることで、非公開のアプリが
リストの後半に固まるので
ちょっとは管理しやすくなりました。

削除できるようになったら誰か教えてください。。。



2013年9月15日日曜日

[Androidアプリ]SIS-パス管理がSony Selectで紹介されました!

大ニュースです!
私がGoogle Playに公開していますAndroid用パスワード管理アプリ、
「SIS-パス管理」が、あのSONYモバイル(旧 SONYエリクソン)さんが運営しております
Sony Selectで紹介されました!

■Sony Selectの「SIS-パス管理」紹介ページ
http://sonyselect.sonymobile.jp/pc/ag/index.php?page=search&id=2983&str=%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89
SONYさん及びSONYモバイルさんと言えば、
「全ての製品のUXを共通化することで、ユーザー体験を強化」
といったUXへの取り組みを全社的に行われているなど、
UIやUXの改善に重点を置いているグローバル企業として有名です。

そんなSONYモバイルさんに
当方のアプリを紹介いただけて、率直に嬉しいです。

実は2週間ほど前に、Sonyモバイルの運営事務局の方から
「貴アプリを紹介したい」という旨のメールをいただいていました。
そのメールを見て最初に感じたことは、「何?このスパムメールは」でした。

ですが、文章やリンク、メールアドレスなどを見るに、
「これは・・・どうやら本物?」と感じてきました(この辺り、だいぶ高揚していましたw)。

快諾するメールを返信した以降は
何も音沙汰が無かったので期待せずに待っていたのですが、
9/14日付けでSony Selectのページで紹介されているのを発見し、
飛び跳ねて喜びましたね。
(実は毎日ページをチェックしていました。。。)

SONYモバイルさんに認められたアプリ、
今後もより安全・安心・使いやすさを追求し、
より良いアプリにしていきたいと思います。

2013年9月14日土曜日

[Androidアプリ] パスワード管理アプリ SIS-パス管理 のバージョンアップ情報

ご無沙汰しております。
最近は夜は涼しくなってきましたが、昼間はまだまだ暑いですね。
熱中症、油断しないように気をつけましょう。

さて、本日、Google Playに登録しております
パスワード管理アプリ「SIS-パス管理」をバージョンアップしましたので
お知らせいたします。

■機能拡張(1)
・データをSDカードに保存する際、これまではSDカードの直下に
 SisPassMgr.db というファイルで保存していました。
・これを、SDカードの直下ではなく、「SisPassMgr」フォルダーの中に
 保存するように変更しました。
・ファイルの移動などはアプリが自動で行いますので、ユーザー様は
 何もする必要はありません。

■機能拡張(2)
・データをSDカードに保存する際、別名で保存できるようにしました。
・ファイル名は、"SisPassMgr_***.db" の、"***" を自由に入力できます。
 (ただし、ファイル名に使えない文字<>:*?"/\|は使えません)

■機能拡張(3) ユーザー様からのご要望
・詳細画面表示のパスワードも隠せるようにチェックボックスを配置しました。

今回の機能拡張により、
より安全、より快適にアプリをご利用いただけると思います。
今後ともよろしくお願いいたします。


□SIS-パス管理
https://play.google.com/store/apps/details?id=jp.sisyou.kumikashi.mpassmgr&hl=ja

□SIS-パス管理Plus
https://play.google.com/store/apps/details?id=jp.sisyou.kumikashi.sispassmgr&hl=ja

2013年9月1日日曜日

docomo Xi契約をやめて、FOMAとMVNOに切り替え(F-02E使用)

月7,000円 → 月1,000円

docomoの携帯電話を使い続けて13年になります。
今年の5月からはF-02EにてXi 2年契約に移行し、
毎月の通信費に7,000円前後を支払い続けていました。

スマホで大容量通信を使わない私

ですが、私のスマホの使い方としては
外出中にデータ通信を行うことはほとんどなく
(電車乗り換え案内、メール、SNS、たまにマップ、少々のブラウジング程度)
馬鹿高いXiの通信費を払い続ける必要はありませんでした。

平日はフルタイムで働いているため、
8:00~20:00あたりは一切通信しませんしね。

毎月のデータ通信量も、せいぜい600MB程度です。
3GBまで高速で使える契約(Xiパケーホダイライト)に
7,000円も払うのは馬鹿らしくなってきました。

今更ながらMNVOとの2台持ちへ

ということで、今更ながら
ガラケーとスマホ(MVNO)の2台持ちにしました。
新しい契約は次のとおりです。

ガラケー:
 端末は以前に使っていたprosolidミュー
 料金プラン:タイプシンプル  1,620円/月 (→後述で743円/月に更に変更)
 iモード:  315円/月

スマホ(MVNO):
 F-02EのXi契約を上記のFOMA契約に変更し、OCN SIMを利用
 OCNモバイルエントリーd LTE 980  30MB/日までの利用制限で 980円/月
 (※その後、OCNさんの仕様変更により、同価格のまま70MB/日に増えていました)


合計:
 1,620 + 315 + 980 = 2,915円/月
 (後に、743 + 315 + 980 = 2,038円/月へ変更)


私の使い方の場合、30MB/日あれば十分でしたので
最適のプランがあったOCNを採用しました。
金曜日の夜にAmazonで注文し、日曜日のAMには商品が届き、
利用契約処理と通信確認までできました。

OCNはdocomoの回線を使っているため、
回線品質はdocomoのそれと変わりません(体感)。

MVNO利用は初めてなので、何かあったらまた当ブログで書こうと思います。


●2014/04/02追記

OCNのSIM、とても快適に使っています。
家族との繋がりもあるので2年後毎にMNP、とかは出来ないので
今の運用方法がBetterかな、と思っています。

さて、今日は3ヶ月ほどから更に通信費を抑えておりますので
その方法について書いていこうと思います。

・・・と思いましたが、別の記事にしてリンクを貼ることにしました。
Webで調べたらすぐに出てくる方法なのでここではキーワードだけ
書いておきますが、

「タイプシンプルをタイプシンプルバリューにプラン変更」

しました。
FOMAの回線費用を900円程度削減でき、とても満足です。
月々7,000円も支払っていたのが恐ろしいですね。

2013年6月23日日曜日

AndroidアプリとWindowsアプリの連携

AndroidアプリとWindowsアプリの連携。
できると便利ですね。
実際、できているアプリも沢山あります。

DropBox連携などクラウドでデータ同期をするもの、
ファイルをローカルでコピーしてAndroid/Windowsの両方で使える、という疎連携のもの。
色々ありますね。

私も先日にAndroidアプリと連携できるWindowsアプリを公開したのですが、
クラウドでの連携機能は持たせませんでした。
無料のクラウドサービスって、自分で個人的に利用する分には良いのですが
他のユーザーに利用していただくために乗っかるにはちょっと・・・と思いましたので。

一方、Google PlayにはDropBox連携を謳うアプリが多数あります。
それらのアプリの作者様方は、どのように考えているのでしょうか。
ポリシーを表示している作者様は大丈夫だと思いますが、
特に考えなしにサービスを利用している人がもしいるのだとしたら
ちょっと考え物ですね。

便利であることは間違いないのですが、
私はまだ手を出せません。

2013年6月6日木曜日

AdMobのアカウントが無効化された

本日、AdMobにログインを試みましたところ、
パスワード入力で跳ねられました。
勿論、入力したパスワードは合っています。

画面上には、「お客様のアカウントは、無効な操作か度重なるポリシー違反が見られたため、無効になりました。(以下略)
といった文章が表示されており、どうやら垢バンされたようです。

ですが、特に不正を行った記憶はなく
なぜアカウントが無効化されてしまったのかさっぱり分かりません。

異議申し立て用フォームが用意されていたので申し立てましたが、
ググってみると「一度アカウントを停止されたら、再開されることは殆ど無い」
ようです。まったく、どうしたことか。

第三者が悪意を持って「広告をクリックしまくる」ことでも
Googleのアルゴリズムは「あ、不正なクリックがされている!」と判断するようです。

・・・いったいどうしろと。
他の広告に切り替えるしかないか。はぁ。


(2013/06/06追記)
Google様より「もっかい見たけど、復活は無理だわ、ごめんねー」というメールが来た。
さっさと他の広告に切り替えておいて正解だったな。

2013年5月21日火曜日

AdMobから「送金に失敗しました」メールが届きました。

AdMobから以下の内容のメールが届きました。(一部のみ)

Your PayPal payment for AdMob earnings was returned to us status "Denied."
 Please contact PayPal to resolve any issues that are preventing you from
receiving funds.

要約すると、送金に失敗したようです。
なぜなのか調べてみますと、
PayPalにて個人認証が必要になっていたことが判りました。

クレジットカードの情報を入力して、様子見です。
明日以降にクレカの利用履歴に記載されるであろう4桁のコードを
PayPal上で入力すれば個人認証は完了しそうです。

その後、AdMobのサポートにメールで連絡する必要がありますが。
ひとまず解決しそうです。

・・・ちょっと焦りましたよ。

2013年2月18日月曜日

Android備忘録:IMEを非表示にする


IMEを明示的に表示させたり非表示にさせたりしたいことが
あるのですが、その書き方をいつも忘れてしまいます。
IMEを非表示にしたい場合は、以下のように書けばOKです。メモメモ。

1
2
3
// IMEを非表示にする
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

2013年2月15日金曜日

Android備忘録:独自レイアウトのAlertDialog


Androidの標準AlertDialogでは、TitleやMessageなどを
配置することが出来るほか、setItem関数でEditTextなどの
Viewを配置することもできます。

もっと複雑なレイアウトを表示したい、
という要望に応えてかどうかは知りませんが、
独自のレイアウトファイル(xml)をAlertDialogに表示
することも可能です。
カスタマイズとかいう単語でもよく書かれていますね。

できることは覚えているのですが、実際にどう記述するのか
どうしても暗記できないので、ここに書いておきます。

1
2
3
4
5
6
7
8
final LayoutInflater layout = LayoutInflater.from(this);
final View customview = layout.inflate(R.layout.masterpass, null);

AlertDialog.Builder(this)
   .setTitle("Titleです")
   .setView(customView)
   .setPositiveButton("OK", null);
   .show();

れいあうといんふれいたー。
・・・どうしても覚えられません。

2013年2月11日月曜日

Android:keystoreファイルの国番号


Androidアプリに署名を付ける際、国番号を指定するところがあります。
keystoreファイルに C= の情報として記述されるものです。

日本の場合は何になるのでしょう?
 ・C=JP
 ・C= (日本の国番号)
どちらも2文字ですね。うーん、困りました。
Androidアプリ開発の書物を読むと、
上(C=JP)で書かれているものがいくつかありましたね。

私もひとまず上にしておきますか。。。

2013年2月10日日曜日

Android備忘録:DatePickerの罠


Androidアプリで日付指定できるアイテムとして、
DatePickerやDatePickerDialogがあります。
これらをカスタマイズした時にハマったことを書いておきます。

アプリは主に公開用ではなく自分用に作っているのですが、
使用者(妻)から次のような要望が来ました。

「日付を指定するときに、"+5日"や"-5日"ボタンが欲しい」

ふむ。設計としては、DatePickerを1つとボタン2つを配置して、
+5ボタンが押されたらDatePickerの日付を+5、
-5ボタンが押されたらDatePickerの日付を‐5だなと。
簡単だ。

コーディング。できた。うん、動作してる。

しかし、これだけでは次の操作時に意図した動きとなりませんでした。
 0.DatePickerの表示は、年/月/日の順に2013/02/06とする(例)
 1.「月」部分のEditTextをタップして、月を「05」と手入力する
 2.「+5ボタン」をタップする
 3.DatePickerの表示は、2013/02/11となる

おや、2013/05/11とはなりません。困りました。

■解決方法
色々とデバッグを重ねて分かった事なのですが、
DatePickerは、EditText部分をタップして数値を直接入力した場合、
「フォーカスがEditTextから外れた時に初めて」設定が反映されるようです。

このため、「+5ボタン」などが押されたときに、
DatePickerからフォーカスを外す処理を加えればOKです。

1
2
3
// DatePickerからフォーカスを外す
DatePicker dp = ****;
dp.clearFocus();

3日ほどハマりました。

2013年2月9日土曜日

Android備忘録:リソースR


Androidアプリ開発を初めて間もない頃、
「layoutに配置したButtonなどのidは、R.id.****で指定だ!」
と、何も考えずに覚えていました。

そんなままで開発を進めていくと、
ある日Buttonを取得しても、findViewByIdの戻り値が
null になる日が来ました。
その後、当然のごとく NullPointerException が来ます。

 えぇ!?ちゃんと Button btn = (Button)findViewById(R.id.button_hoge);
 と記述しているのになぜ??

…はい。見ているレイアウトファイルが違うからですね。
ActivityをextendsしているクラスのonCreateの中で、
例えば setContentView(R.layout.main); としているとします。

その後、main.xml ではない別のレイアウトファイルを
扱い、その中のButtonを使う場合には、ちゃんと別のレイアウトを指定して
findViewById しないといけません。以下、例です。

1
2
3
final LayoutInflater layout = LayoutInflater.from(this);
final View view = layout.inflate(R.layout.sub, null);
final Button btn = (Button) view.findViewById(R.id.button_hoge);

これで問題なく動作するはずです。
やはりちゃんと理解しないとダメですね。

2013年2月8日金曜日

Google Playに登録する画像イメージの用意


ストアにアプリを登録する際に、
32ビットのPNGを用意する必要がある場合があります。
(もしくはJPGでも良いのですが)

私はPCでちょっとしたイラストを描くのですが、
「32ビットのPNG」という表現を見たことがありませんでした。
(8ビットとか24ビットなら見たことあるんだけど)

Googleさんで調べてみたところ、
「24ビットのPNGに透過を加えたものが、24+8=32ビットのPNG」
ということが分かりました。

そういえば、8ビットのPNGの場合は透過色は1色しか指定できませんが、
24ビットの場合は透過のグラデーションも表現できますね。
何気ないことですが、改めて気が付きました。

Androidのデータベース


Androidでよく使われるDBとしてSQLiteがあります。
正直、私はAndroidアプリを開発するまでデータベースを
扱ったことはありませんでした。
(使う機会が無かったんですね)

そんな私でも、SQLiteは非常に簡単に扱うことが出来ました。
とは言いましても、まだ insert/update/delete くらいしか
使っていませんけれど。

簡単な使い方については他のサイト様が分かりやすく
記述していますので、食べず嫌いの方はお試しあれ。簡単です。

#コマンドの記述規則が間違っていると、
 これまた簡単にExceptionを履きます。

Android備忘録:Activity遷移時のアニメーション


現在開発中のアプリを触っていて、ふと
「画面遷移の時にアニメーション効果が欲しいな。
 iPhoneのアプリみたいに、スルっとした。」
と感じました。

Activityの画面遷移について調べてみると、
overridePendingTransition関数に辿り着きました。

startActivity関数(startActivityForResult関数、finish関数)の後で
記述すると、指定した引数のアニメーションを行うというものです。
非常にカンタン。

コーディングして、いざ実行してみると・・・
うまく動きません。なぜだ。

その日は諦めて寝たのですが、次の日に原因がはっきりしました。
Androidの表示設定の中で、アニメーションを切っていたんですね。
なんてこった。

Androidの表示設定にありますアニメーションの項目は、
 ・アニメーションなし
 ・一部のアニメーション
 ・すべてのアニメーション
の3つがあります。
この中で「すべてのアニメーション」を設定していないと
overridePendingTransition関数を書いても
何も変化はありません。ご注意ください。

2013年2月7日木曜日

Android備忘録:Preferencesに長い文字列を表示


AndroidのPreferencesに長い文字列を設定すると、
1行しか表示できない仕様のようなので、見切れてしまいます。
これを複数行の表示に対応させる方法を紹介します。

1.以下のサイトから、希望のAPIレベルのxmlファイルをコピーする。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core/res/res/layout/preference.xml

2.res/layout/ 内に、例えば mypreference_layout.xml を作成する。

3.コピーした内容を mypreference_layout.xml にペーストする。

4.android:singleLine="true" を android:singleLine="false" に変更する。

5.使用するPreferenceのView(例えばEditTextPreference)のプロパティ値に
  android:layout="@layout/mypreference_layout" を指定する。

これで、長い文字列を title に設定した場合でも
複数行の表示となり、見切れることはありません。

Android備忘録:ListViewの背景を変更


ListViewの背景に画像を設定してビルドすると、
ListViewのスクロール時に、ListViewの背景が真っ黒になりました。
これは一体どうしたことでしょうか。
ただ背景を変更しただけなのに。

調べてみたところ、以下のようにソースで記述すれば良いようです。

final ListView listView = ***;
listView.setScrollingCacheEnabled(false);

原因は不明ですが、ひとまずこれで解決です。

Android備忘録:タイトルバーの非表示化


Activityをextendsしたクラスにおいて、
onCreate関数の中で以下を記述すればOKです。

requestWindowFeature(Window.FEATURE_NO_TITLE);

そろそろ暗記できてきたかも。

Android備忘録:10,000などの金額表示


Androidで数値を扱うアプリを作る際に、
10,000 など特別な表記をしたい場合があります。
以下のように記述すればOKです。

int money = 1234567890;
String pay = String.format("%,3d yen", money);
(pay の中身: 1,234,567,890 yen)

上記のように、3文字ずつのカンマ区切りになります。
これは便利ですね。

Android備忘録:開発環境の移行時


普段Eclipseを使ってAndroidアプリを作っているのですが、
プロジェクトをEclipse間で移動する時にはまった事を
備忘録として書いておきます。

普段はPC1で開発しており、たまにPC2でも開発をしています。
Visual Source Safeのようにサーバー上でプロジェクトを管理
できたら良いのですが、ローカルで作業をしています。

よってPC1で開発途中のものをPC2に持っていくには、
USBメモリやLAN、クラウド経由でプロジェクトファイルを
コピーし、PC2のEclipseにてプロジェクトのImportをする必要があります。

ここで問題が。
PC1で問題なくビルドできていたプロジェクトが、
PC2に移した途端に、ソースファイルに×マークが付いてしまいました。

エラー内容:
  The type java.lang.Object cannot be resolved.
  It is indirectly referenced from required .class files

解決方法としては、
ビルドパス(BuildPath)の設定を変更すればOKです。
「なに、ビルドパスの設定なんて変えていないぞ」
とは仰らず、ビルドパスの設定を見てみてください。

チェックがついていない項目があると思います。
これにチェックを付ければ問題解決です。

なぜこんな現象が発生するのかは判っていません。
うーん、なぜだ。

Android開発環境の構築が楽チンになった


一昔前では、Androidの開発環境を整えるのは
結構時間が必要だった記憶があります。
ですが、つい先日にAndroid開発環境を新規に構築することがあったのですが、
驚くほど楽チンになっていますね。

JDKはもともと入っていたので入れる必要がなかったのですが、
Android SDKやEclipseの環境が1つのインストーラーから
全て手に入るようになっておりビックリしました。

入手はこちらから。


普段使っている開発環境も再構築しようかな。

はじめに


はじめまして。28際の会社員です。
PCを初めて触ったのは小学校4年生のころ、
父親が会社で使っているノートPCを家に持ってきたことが
始まりでした。

そのちょっと後でWindows95が出ましたね。
そのくらいの時代感覚です。

小学校5年生で初めて自作PCを作り、
テレホーダイ、ISDN、ADSLを経て今に至ります。
htmlタグを直書きしてのウェブサイト作成は数年やっていたものの、
ブログというものは今の今まで書いたことはありませんでした。

mixiやfacebookなどは、時代経過とともに
ほどほどに触ってきてはいましたが。

今は趣味の1つとしてAndroidアプリを開発しているので
そこでハマった事や感じたこと、その他普段のことなどを
つらつらと書いていこうと思います。

よろしくお願いします。

2013年2月6日水曜日

作成

Google Developer登録で使用するために作成したブログです。
ひとまず初書き込みです。