以编程方式更改元数据值android

时间:2018-09-17 16:58:58

标签: android android-manifest

如何以编程方式在清单或字符串资源中以字符串值更改元数据

3 个答案:

答案 0 :(得分:1)

使用将构建变量注入清单中,您可以通过编程方式更改元数据值

在build.gradle中

defaultConfig {
        manifestPlaceholders = [ senderid:"12345"]
    }

buildTypes {
        release {
            manifestPlaceholders = [ senderid:"56789"]
        }
    }

在清单文件中

<meta-data
            android:name="SENDER_ID"
              android:value="${senderid}" />

参考链接: https://developer.android.com/studio/build/manifest-build-variables.html

答案 1 :(得分:0)

您无法修改资源,当您将信息作为资源(在res文件夹中)提供时,无法以编程方式进行修改, 您不能在该目录中写入。与Android Manifest相同,清单元数据在运行时无法更改。

最好有两个字符串,例如第一个值和第二个值,所以您可以使用以下字符串:

Java:

thing.setText(getResources.getString(R.id.variablename2)) 

科特琳:

thing.text = resources.getString(R.id.variablename2) 

答案 2 :(得分:0)

可以通过将元数据添加到AndroidManifest.xml文件中来更改元数据。以后,您可以从活动中使用捆绑软件访问它。这是示例。

AndroidManifest.xml

androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'

读取此元数据仅需要几行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>

Activity扩展了具有getPackageManager()方法的ContextWrapper。该方法返回PackageManager,该软件包用于通过传递包名称和元数据标志来获取ApplicationInfo。返回的ApplicationInfo包含一个字段metaData,它实际上是一个包含所有元数据的Bundle。第4行获取与XML中的“ android:name”参数相同的字符串。希望对您有帮助!