有时候你有这方面的需要,建立了一些app-wide配置信息在一个android应用程序或需要创建一个类,可以用于多个项目的设置与一个通用的方式配置的价值观。这是特别有用的API钥匙,为事物像在程序可能会不同,但应该是可访问在同样的方式。有几种方法来做这件事,但我是来更喜欢是加入一个元数据节点在AndroidManifest.xml文件。
这一领域可以用来储存一个布尔值、浮动,智力,或字符串,以后访问的数据类型为你束方法(例如,getInt())。这里是一个例子,如何定义有价值的AndroidManifest.xml:
Java代码:
- <?xml version="1.0" encoding="utf-8"?>
-
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-
- package="com.example.readmetadata"
-
- android:versionCode="1"
-
- android:versionName="1.0">
-
- <application android:icon="@drawable/icon" android:label="@string/app_name">
-
- <activity android:name=".MainMenu" android:label="@string/app_name">
-
- <intent-filter>
-
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
-
- </intent-filter>
-
- </activity>
-
- <meta-data android:name="my_api_key" android:value="mykey123" />
-
- </application>
-
- <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8" />
-
- </manifest>
阅读这篇文章的元数据只需要几行Java:
Java代码:
- try {
-
- ApplicationInfo ai = getPackageManager().getApplicationInfo(activity.getPackageName(), PackageManager.GET_META_DATA);
-
- Bundle bundle = ai.metaData;
-
- String myApiKey = bundle.getString("my_api_key");
-
- } catch (NameNotFoundException e) {
-
- Log.e(TAG, "Failed to load meta-data, NameNotFound: " + e.getMessage());
-
- } catch (NullPointerException e) {
-
- Log.e(TAG, "Failed to load meta-data, NullPointer: " + e.getMessage());
-
- }
ContextWrapper活动延伸,它有一个getPackageManager()方法。 方法的作用是:返回的,这是用于PackageManager取ApplicationInfo,传球包名和元数据国旗。 返回的ApplicationInfo包含一个字段、元数据,这是一束所包含的所有元数据。第4行取一个字符串,是相同的:名称“参数”机器人在XML。
那听起来比看上去的复杂,它确实是。基本上,如果你有一个活动,你可以拿你的维管束,元数据从AndroidManifest并使用它在整个应用程序。本人只理解这么些,希望高手多多的指教。这样我也可以更快的进步,进而缩小我和高手的差距。在这里谢谢武林高手了。