2010年11月16日火曜日

<application>の直下に<meta-data>を書いてもいいのかもしれない

AndroidManifest.xml<meta-data>の説明では、<meta-data>の親になるのは、

  • <activity>
  • <activity-alias>
  • <service>
  • <receiver>

の4つしか書いてない。

だけど、ApplicationInfoにはmetaDataフィールドがあるし、
実機で検証したところ、期待通りに機能している。

public static Object getAppMetaData(Context context, String key) {
    try {
        final Bundle metaData =
            context
            .getPackageManager()
            .getApplicationInfo(
                context.getPackageName(),
                PackageManager.GET_META_DATA)
            .metaData;
        if (null != metaData) {
            return metaData.get(key);
        }
    } catch (NameNotFoundException e) {
    }
    return null;
}

「動く」けど、ドキュメントに書かれていない、この便利な機能を使ってよいのだろうか?

答えがないかと探していたら、見つけたっぽい。

AdMobのガイド
<application>の子要素で<meta-data>使って"ADMOB_PUBLISHER_ID"をセットしている。

AdMobがこの仕組みを使ってるってことは、だれでも使っていいってことだろう。
いつかドキュメントが更新されるに違いない。
もしも問題になったとしても、解決策がすぐに提案されるだろう。

0 件のコメント:

コメントを投稿