Sunflat のブログ

ソフトウェア開発についての話題が多いかも

Android SDK Tips #1

PapiJump for Androidを作る時にいろいろ調べたので、メモ。
Activityの状態遷移が複雑すぎ…

自動的に画面が暗くならないように

View#setKeepScreenOn(true);

キーボードを開いた時などに、画面が自動的に回転しないようにする

manifestファイルのactivity要素に以下のような属性を追加

<activity 
  android:screenOrientation="portrait"  
  android:configChanges="keyboardHidden|orientation"
...

android:configChangesをつけないと、キーボードを開いたときに、Activityが勝手に再起動してしまう。

参考:http://androidguys.com/?tag=android-rotation

画面サイズに合うように、SurfaceViewの内容を拡大縮小

SurfaceViewのサイズは画面サイズに合わせておいて、Canvas#scale()を使うと良い。

もし、SurfaceView#setFixedSize()を使う場合は、Canvasを取得する時にSurfaceHolder#lockCanvas(Rect)を使う。(そうしないと、画面サイズでクリッピングされてしまうっぽい)

機種名、ファームウェアバージョンなどを取得

android.os.Buildクラスを使う

端末固有ID

以下のように取得できる。emulatorでは取れない。

String android_id = android.provider.Settings.System.getString(getContentResolver(), System.ANDROID_ID);

DevPhoneで試したところ、"200"+IMEIの16進数表現 になるっぽい。


ちなみに、TelephonyManager#getDeviceId() は、READ_PHONE_STATEパーミッション(端末の電話番号まで取れてしまう)が必要なので、使いづらい。

参考:http://groups.google.co.jp/group/android-developers/browse_thread/thread/c0d243345b90c8a5/4359056ef4cf6850

ブラウザ起動

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://..."))); 

ブラウザでは常に新しいウィンドウが開いてしまう(最大8個)。なんとかならないものか…。