2012年9月17日月曜日

Google Cloud Messaging for Android ことはじめ(もっと簡単に動かしてみる編)

今回はアプリケーションサーバの代わりにブラウザを使ってメッセージを送信する方法について書いてみました。



2012年9月6日木曜日

ダブルクリックでジャンプできるようにログを出す方法

LogCatのダブルクリックでコードにジャンプする機能を利用する方法について考えてみたメモ

コード


まとめ

色々試した結果
at クラス名(ファイル名:ライン数)
がログに含まれているとLogCatでダブルクリックした時にコードにジャンプ出来るようです。
上記のコードではログの可読性向上のため、getPadding()でタブ数を計算してジャンプ用ログを整列しています。

こんな感じでログが出ます。


2012年9月1日土曜日

ロックスクリーンを考慮して処理の再開を行う方法

この動画に「Lock Screen時は音楽再生を止める」というTipsがあったので、試してみたメモ

Google Developers Live
[JP 日本語] Google Play での Android アプリ提供ことはじめ
22分40秒あたり

コード


まとめ

  • アプリが開いている状態でスリープから復帰した場合、ロックスクリーンが表示されていても、onResume()が呼ばれる
  • ロックスクリーンが表示されているかの判定はKeyguardManager#inKeyguardRestrictedInputMode()で可能
  • ロックスクリーンを使用していない場合への考慮も必要
  • ロックスクリーン解除時は、ブロードキャストインテントandroid.intent.action.USER_PRESENTがシステムから通知される

その他

KeyguardManagerですが、API Level 16からisKeyguardLocked()/isKeyguardSecure()が追加されたようです。
isKeyguardLocked()でもロックスクリーン表示の判断が行えました。
isKeyguardSecure()はロックスクリーンにパスワードやパターンなどが設定されている時にtrueを返すようです。
※ API Level 15のIS11LGでも上記のメソッドが使用出来ました。リファレンスの誤記でしょうか?

参考にしたサイト
Yukiの枝折
Android:キーガードはActivityではなくViewであることの影響

2012年8月18日土曜日

LruCacheの使い方

TwitterのツイートをListViewに表示するという処理で、TwitterアイコンのキャッシュにLruCacheを使ってみたメモです。

馴れ初め(ダイジェスト)

TwitteアイコンのキャッシュにSoftReferenceを使っていたのですが、2.2 と 2.3 / 4.xで挙動が違って困っていたところ、以下のツイートに出会う。


ということで、Android Training「Caching Bitmaps」で使われていたLruCacheに辿り着いた次第です。
http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

Twitter と 有益な情報をツイートしてくれる方々に感謝です。

コード


使い方

LruCacheはAPI Level 12からのクラスですが
http://developer.android.com/reference/android/util/LruCache.html
Support Libraryに入っているので
http://developer.android.com/reference/android/support/v4/util/LruCache.html
API Level 4から使えるようになっています。

使い方としては
・KeyとValueの型を指定してインスタンス化する
・LruCache#sizeOf()をオーバーライドしてBitmapのByte数を返してあげる
だけです。

Android TrainingのサンプルコードではBitmap#getByteCount()を使っていますがAPI Level 12からのメソッドなので上記の処理に書き換えています。
上記のコードではキャッシュサイズを1MB固定にしていますが、端末のDalvikVMヒープサイズから動的に決めたい場合は、Android TrainingのサンプルコードのようにすればOKです。

あとは、Twitterアイコン画像URLをKeyにBitmapをキャッシュしておいて、画像使用時にImageCache.getImage(Twitterアイコン画像URL)がnullだったら再取得というような処理にしておけばよいかと思います。

まとめ

2.3以降GCがモア アグレッシブになっているので、SoftReferenceを使用した場合、ListViewの行が画面から消えるとすぐに画像キャッシュがクリアされてしまう。
従って、今後はLruCacheを使いましょう。
といったところでしょうか。

LruCacheを利用することで、SoftReferenceを使用した場合の2.2 と 2.3以上でキャッシュの挙動が違うという問題が解決できました。
公式ドキュメントはちゃんとチェックしておかないとダメですね。。

因に僕は、常にこの構成でデバッグしています。
書いたコードに対してすぐにバージョン間の差異が確認できるので良いかなと思っています。
今のところ誰からも賛同を得られていませんが...

Fragmentationと共に生きる方法
http://neta-abc.blogspot.jp/2012/08/fragmentation.html


2012年8月11日土曜日

エミュレーター・実機に文字列を流し込む方法

最近多用している便利なコマンドのメモです。

adb shell input text <文字列>

エミュレーター・実機でテキスト入力欄を選択して、上記のコマンドを実行すると文字入力ができます。
<文字列>の部分に日本語は使えません。
端末のIME設定が入力に反映されますのでローマ字入力してあげれば日本語の入力も可能です。

adb shell
input text <文字列>
でも使えますが、adbを切断したときにコマンド履歴は消えてしまうので
adb shell input text <文字列>
とやったほうが、コマンド履歴から再利用できて良いと思います。

Facebookのテストアカウントとか使ってるとメールアドレス長くて手入力は辛いですよね。。

MacでInkscapeを使う(画像取り込み編)

Inkscapeに画像ファイルを取り込もうとしてハマったのでメモしておく。

ドラッグ&ドロップ

Windows環境ですと、画像ファイルの取り込みはExplorerからドラッグ&ドロップすればOKですが、Mac環境では、ドラッグ&ドロップは受け付けてくれませんでした。
X上で動いているからでしょうか?

コピー&ペースト

なので、今度はコピー&ペーストを試してみましたがこんな感じに...


インポート

で最後に辿り着いたのがインポートです。
メニューの[ファイル] - [インポート]から開きます。
拡張子のフィルタを[すべてのイメージ]にして、取り込みたい画像ファイルを選択すればOKです。
後は、画像を「リンク」にするか「埋め込み」にするか聞かれますのでお好みで。
・リンクにすると、画像ファイルを移動したときにリンク切れになります。
・埋め込みにすると、SVGファイルに埋め込まれるのでファイルサイズが大きくなります。


これで画像が取り込めるようになりました。
Windows環境と比べると少し面倒ですね。