当前位置:   article > 正文

Android Manifest中的meta-data_andriodmanifest meta-data

andriodmanifest meta-data

转自:

https://www.baidu.com/link?url=yt32m-iRAhA-ZJZtLdV-xTjH9RSNMsaWvO24FzlYR-oLIMjqrxG7561mvyTlt-Ix&wd=&eqid=92b3fc710001cf25000000065b73c3c2

 


语法

  1. <meta-data
  2. android:name="string"
  3. android:resource="resource specification"
  4. android:value="string" />

<meta-data>是一个键值对,用来为父控件存储多余的数据。一个控件可以包含任意数量的<meta-data>,这些值都存储在单个Bundle对象中,并作为PackageItemInfo.metaData字段提供给父控件。

属性

  • android:name:该item的唯一名称。为了保证其名字唯一性,可以使用 Java 命名风格
  • android:resource:对资源的引用。其值为资源的ID,可以通过该Bundle的 Bundle.getIn()方法获取其ID值
  • android:value:分配给该item的值。更多类型及介绍见官网文档

用法

在Android中,可以在 AndroidManifest.xml中定义meta-data信息。

基本用法

最基本的用法增加item用来存储信息,且该信息可以被整个项目所使用。这时,<meta-data>定义在<activity>外面,且在<application>内,例如:

  1. <manifest>
  2. <application
  3. android:icon="@drawable/icon"
  4. android:label="@string/app_name">
  5. <meta-data android:name="my_test_metagadata" android:value="testValue" />
  6. <activity
  7. android:name=".MainActivity"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <manifest>

读取时如下:

  1. ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
  2. Bundle bundle = ai.metaData;
  3. String myApiKey = bundle.getString("my_test_metagadata");

其中,可以存储的类型还包括boolean, int, string, float

用于第三方库或APIs

项目中经常需要引用第三方库或使用其API,但对于详细的产品,需要一个KEY来识别,例如:判断不同的使用者或不同的机型,这个KEY必须由开发者定义,并使用相应API,但由于安全性,这个KEY不可能被共享。

通过使用<meta-data>,开发人员可以与使用者共享第三方库或APIs的KEY,例子如下:

  1. try {
  2. ApplicationInfo ai = getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
  3. Bundle bundle = ai.metaData;
  4. String myApiKey = bundle.getString("my_test_metagadata");
  5. } catch (Exception e) {
  6. 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.");
  7. }

例如,为了能够使用 HockeyApp 的 crash report功能,需要在AndroidManifest中添加如下代码:

<meta-data android:name="net.hockeyapp.android.appIdentifier" android:value="${HOCKEYAPP_APP_ID}" />

这行代码会在加载 net.hockeyapp.android.appIdentifier时使用value值为${HOCKEYAPP_APP_ID}的数据,所以,HockeyApp 可以知道是哪一台设备请求获取crash report功能。

配置Activity

<meta-data>的另一个应用是配置Activity,通过这种方式,可以为当前Acitivity配置数据,项目能够更好的处理Activity。这时,<meta-data>标签在<activity>标签内。例如:

  1. <manifest>
  2. <application
  3. android:icon="@drawable/icon"
  4. android:label="@string/app_name">
  5. <activity
  6. android:name=".MainActivity"
  7. android:label="@string/app_name">
  8. <intent-filter>
  9. <action android:name="android.intent.action.MAIN" />
  10. <category android:name="android.intent.category.LAUNCHER" />
  11. </intent-filter>
  12. </activity>
  13. <activity android:name=".SearchableActivity" >
  14. <intent-filter>
  15. <action android:name="android.intent.action.SEARCH" />
  16. </intent-filter>
  17. <meta-data android:name="android.app.searchable"
  18. android:resource="@xml/searchable"/>
  19. </activity>
  20. </application>
  21. <manifest>

<activity>标签内读取数据可以通过如下方式:

  1. try {
  2. ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
  3. Bundle bundle = ai.metaData;
  4. if (bundle != null) {
  5. String apiKey = bundle.getString("apikey");
  6. Log.d(this.getClass().getSimpleName(), "apiKey = " + apiKey);
  7. }
  8. }
  9. } catch (PackageManager.NameNotFoundException e) {
  10. Utilities.log(this.getClass().getSimpleName(), "Failed to load meta-data, NameNotFound: " + e.getMessage());
  11. } catch (NullPointerException e) {
  12. Log.e(this.getClass().getSimpleName(), "Failed to load meta-data, NullPointer: " + e.getMessage());
  13. }



作者:sunnyaxin
链接:https://www.jianshu.com/p/37f3ea4fd3d6
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/652594
推荐阅读
相关标签
  

闽ICP备14008679号