meta-data在AndroidManifest中是以键值对的形式存在的,可以将meta-data放在application根节点下,也可以放在某个activity节点下。因为存放的位置不同,因此获取value时也要使用对应的方法,下面是我写的一个小测试。

代码如下:

先是在AndroidManifest中的application和mainActivity下添加两个meta-data属性。


[java] 
​​view plain​​​
​​​copy​​




1. <application
2. "true"
3. "@drawable/ic_launcher"
4. "@string/app_name"
5. "@style/AppTheme" >
6. <meta-data
7. "com.lzy.test"
8. "测试" />
9.
10. <activity
11. ".MainActivity"
12. "@string/app_name" >
13. <meta-data
14. "com.example.metatest.MainActivity.com.lzy.activity.test"
15. "Activity测试" />
16.
17. <intent-filter>
18. "android.intent.action.MAIN" />
19.
20. "android.intent.category.LAUNCHER" />
21. </intent-filter>
22. </activity>
23. </application>



接下来在mainActivity中来获取这两个属性的值。


[java] 
​​view plain​​​
​​​copy​​




1. package com.example.metatest;
2.
3. import android.app.Activity;
4. import android.content.ComponentName;
5. import android.content.pm.ActivityInfo;
6. import android.content.pm.ApplicationInfo;
7. import android.content.pm.PackageManager;
8. import android.content.pm.PackageManager.NameNotFoundException;
9. import android.os.Bundle;
10. import android.util.Log;
11. import android.widget.Toast;
12.
13. /**
14. * meta 测试
15. *
16. * @author Administrator
17. *
18. */
19.
20. public class MainActivity extends Activity {
21.
22. public static final String TEST = "com.lzy.test";
23.
24. public static final String ACTIVITYTEST = MainActivity.class.getName()+".com.lzy.activity.test";
25.
26. @Override
27. protected void onCreate(Bundle savedInstanceState) {
28. super.onCreate(savedInstanceState);
29. setContentView(R.layout.activity_main);
30.
31. null);
32.
33. null);
34.
35. this, test+"--"+activityTest, Toast.LENGTH_LONG).show();
36. }
37.
38. /**
39. * 根据key从Application中返回的Bundle中获取value
40. *
41. * @param key
42. * @param defValue
43. * @return
44. */
45. private String getMetaDataStringApplication(String key, String defValue) {
46. Bundle bundle = getAppMetaDataBundle(getPackageManager(), getPackageName());
47. if (bundle != null && bundle.containsKey(key)) {
48. return bundle.getString(key);
49. }
50. return defValue;
51. }
52.
53. /**
54. * 获取Application中的meta-data.
55. *
56. * @param packageManager
57. * @param packageName
58. * @return
59. */
60. private Bundle getAppMetaDataBundle(PackageManager packageManager,
61. String packageName) {
62. null;
63. try {
64. ApplicationInfo ai = packageManager.getApplicationInfo(packageName,
65. PackageManager.GET_META_DATA);
66. bundle = ai.metaData;
67. catch (NameNotFoundException e) {
68. "getMetaDataBundle", e.getMessage(), e);
69. }
70. return bundle;
71. }
72.
73. /**
74. * 根据key从Activity中返回的Bundle中获取value
75. *
76. * @param key
77. * @param defValue
78. * @return
79. */
80. private String getMetaDataStringFromActivity(String key, String defValue) {
81. Bundle bundle = getActivityMetaDataBundle(getPackageManager(), getComponentName());
82. if (bundle != null && bundle.containsKey(key)) {
83. return bundle.getString(key);
84. }
85. return defValue;
86. }
87.
88. /**
89. * 获取Activity中的meta-data.
90. *
91. * @param packageManager
92. * @param component
93. * @return
94. */
95. private Bundle getActivityMetaDataBundle(PackageManager packageManager, ComponentName component) {
96. null;
97. try {
98. ActivityInfo ai = packageManager.getActivityInfo(component,
99. PackageManager.GET_META_DATA);
100. bundle = ai.metaData;
101. catch (NameNotFoundException e) {
102. "getMetaDataBundle", e.getMessage(), e);
103. }
104.
105. return bundle;
106. }
107.
108. }



​源码下载​