如何在清单文件或字符串资源中以编程方式更改元数据值的字符串值。
defaultConfig {
manifestPlaceholders = [ senderid:"12345"]
}
buildTypes {
release {
manifestPlaceholders = [ senderid:"56789"]
}
}
在清单文件中
<meta-data
android:name="SENDER_ID"
android:value="${senderid}" />
thing.setText(getResources.getString(R.id.variablename2))
Kotlin:
thing.text = resources.getString(R.id.variablename2)
更改元数据可以通过向AndroidManifest.xml文件添加元数据来完成。稍后,您可以使用Bundle从活动中访问它。以下是示例。
AndroidManifest.xml
<?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代码
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());
}
Activity继承自ContextWrapper,该类具有getPackageManager()方法。该方法返回PackageManager,用于获取ApplicationInfo,传递包名和meta-data标志。返回的ApplicationInfo包含一个字段metaData,实际上是一个包含所有元数据的Bundle。第4行获取的字符串与XML中的“android:name”参数相同。希望这可以帮助您!