N0guch1.GitHub.io


home > meta-dataを使って値を登録してみた Project maintained. GitHub Pages — by n0guch1

meta-dataを使って値を登録してみた


〜meta-dataとは〜

AndroidManifestにmeta-dataタグを使って値を登録する事が出来ます。
他のapkから読み込んだり、設定データなどの静的データの永続化に利用出来ます。

〜実装〜

■設定
AndroidManifest.xml

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <!-- 文字列 -->
    <meta-data android:name="key" android:value="value"/>
    <!-- 画像 -->
    <meta-data android:name="smallIcon" android:resource="@drawable/comment_icon"/>
    <!-- 遷移時などのActivity -->
    <meta-data android:name="startActivity" android:value=".MainActivity"/>

    <activity
    android:name=".MainActivity"
    android:label="@string/app_name">
    .
    .
    .
</application>

※meta-dataタグはapplicationタグ直下に記載します。

■取得

//meta-dataに必要なappInfo取得
ApplicationInfo appInfo = null;
try {
    appInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

//文字列
String value = appInfo.metaData.getString("key");
Log.d("tag", "value: " + value);

//画像
int smallIcon = appInfo.metaData.getInt("smallIcon");
Log.d("tag", "smallIcon: " + smallIcon);

//Activity
Class startClass = null;
String applicationName = null;
try {
    applicationName = getPackageManager().getApplicationLabel(getPackageManager().getApplicationInfo(getPackageName(), 0)).toString();
    String activityName = appInfo.packageName + appInfo.metaData.getString("startActivity");
    startClass = Class.forName(activityName);
} catch (ClassNotFoundException | PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
Intent intent = new Intent(this, startClass);

※meta-dataタグ内のresourceはgetIntすることでidを取得します