在Android中,您可以定义meta-data
信息在你的AndroidManifest.xml
这是码头链接 https://developer.android.com/guide/topics/manifest/meta-data-element.html
非常基本的用法
它基本上是存储可通过整个项目访问的信息的附加选项。在这种情况下,<meta-data>
定义在外部<activity>
标签和里面<application>
tag.
定义:
<manifest>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<meta-data android:name="my_test_metagadata" android:value="testValue" />
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<manifest>
Reading:
ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
您可以保存一个boolean
, an int
, String
或浮动。
它对于库或 API 很有用
假设您创建了一个可供所有人使用的 API/LIB。但是,对于特定过程,您需要KEY
然后KEY
必须由将使用您的 API 的开发人员定义。
这样,您就无法预测开发人员将共享哪个密钥。
Using <meta-data>
,想要使用您的 API/LIB 的开发人员可以分享KEY
与你。这样,您就可以将 API 配置为读取该 KEY,并在用户未定义时引发异常。
try {
ApplicationInfo ai = getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
} catch (Exception e) {
Log.e(TAG, "Dear developer. Don't forget to configure <meta-data android:name=\"my_test_metagadata\" android:value=\"testValue\"/> in your AndroidManifest.xml file.");
}
一个典型的例子是 Google Ads (Admob)。
您必须将以下行添加到您的AndroidManifest
:
<!--This meta-data tag is required to use Google Play Services. (adMob)-->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
这将加载com.google.android.gms.version
其值表示为@integer/google_play_services_version
。然后,Google Play Services (Admob) 可能会读取此内容metadata并且它将能够确定您在构建应用程序时使用的 Google Play 服务版本。
另一个例子
另一种用法是<meta-data>
是时候使用它们来配置活动。通过这种方式,您可以将有关您的活动的有价值的信息传递给 Android,然后 Android 可以正确处理您的活动。
在这种情况下,<meta-data>
标签被添加到里面<activity>
tag.
我看到的第一个示例是定义搜索活动时。
<manifest>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SearchableActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
</application>
<manifest>
然后,要从活动标记获取元数据,请使用以下命令:
try {
ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
if (bundle != null) {
String apiKey = bundle.getString("apikey");
Log.d(this.getClass().getSimpleName(), "apiKey = " + apiKey);
}
}
} catch (PackageManager.NameNotFoundException e) {
Utilities.log(this.getClass().getSimpleName(), "Failed to load meta-data, NameNotFound: " + e.getMessage());
} catch (NullPointerException e) {
Log.e(this.getClass().getSimpleName(), "Failed to load meta-data, NullPointer: " + e.getMessage());
}