2011/12/29

Android端末のフィーチャー定義を取得する

端末のフィーチャー定義を取得する方法です。

PackageManagerクラスのgetSystemAvailableFeaturesあるいはhasSystemFeature
を利用することで調べることができます。

サンプルソースは下記。

FeatureInfo[] infos = getPackageManager().getSystemAvailableFeatures();
for (FeatureInfo info : infos) {
    android.util.Log.e("yuki" , "yuki features = "  + info);
}

フィーチャー名は PackageManager.FEATURE_* として定数定義されています。

参考:Android Developerサイト

以上です。
2011/12/28

Android3.2以降、画面回転で意図せずActivityが再起動してしまう

orientationのconfigChangedを受け取っているのに画面回転させるとActivity
が再起動されてしまう問題に悩まされたので覚書。

HoneyComb MR2(Android3.2)以降、画面回転時にSCREEN_SIZEのconfigChangeも
走るようになりました。

参考:Android Developerサイト

これにより、AndroidManifestで
 android:configChanges=orientation
としただけでは不十分となりました。

画面回転時の再起動を防ぎたい場合は
 android:configChanges=orientation|screenSize
とする必要があります。(※端末形状によってはkeyboardHiddenも必要)

実際にソースコードを組んで確認してみます。
@Override
protected void onDestroy() {
    super.onDestroy();
    int change = getChangingConfigurations();
    android.util.Log.e("yuki" , "yuki c=" + String.format("0x%08x", change));
    // CONFIG_SCREEN_SIZE 0x000004
    // CONFIG_ORIENTATION 0x0000008
}
結果は 
 yuki c=0x00000480
となります。(CONFIG_SCREEN_SIZE|CONFIG_ORIENTATION)

以上です。