我如何使 Activity intentFilter 动作从 strings.xml 动态化
how do i make Activity intentFilter action dynamic from strings.xml
我正在使用不同的产品口味,并通过 intentFilter 打开一个 Activity,其动作预定义如下所示。
<activity android:name=".MyActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.package.name.MyAction"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
为了打开这个 activity 我正在使用 :
Intent intent = new Intent("com.package.name.MyAction");
startActivity(intent);
现在,如果我的设备有两种产品风格的 apk,选择器会为某些设备打开哪个 activity 应用程序,对于某些设备它会显示错误 no app found to perform the action
。
一旦我卸载了一个应用程序,并在我的设备中只保留了一个应用程序,一切正常。
我想克服的一个解决方案是,使动作恒定为 Intent intent = new Intent("com.package.name.MyAction");
context.startActivity(intent);
动态。但是我不确定我该怎么做。
我是 AndroidManifest,它应该是这样的:
<action android:name="com.package.name.MyAction"+getString(R.string.product_name)/>
这是我无法在 AndroidMaifest
中获取字符串的部分。
打开 activity 我做了:
Intent intent = new Intent("com.package.name.MyAction"+getString(R.string.product_name));
startActivity(intent);
任何帮助将不胜感激,谢谢。
在您的 build.gradle
(应用)中,像这样配置您的口味:
productFlavors {
first {
// ...
manifestPlaceholders = [action: "com.package.name.ActionA"]
}
second {
// ...
manifestPlaceholders = [action: "com.package.name.ActionB"]
}
}
然后将占位符的值放在AndroidManifest.xml
文件中:
<activity android:name=".MyActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="${action}"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
为了让占位符打开activity,只需通过BuildConfig
:
获取即可
String yourAction = BuildConfig.action;
// start your intent here
我正在使用不同的产品口味,并通过 intentFilter 打开一个 Activity,其动作预定义如下所示。
<activity android:name=".MyActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.package.name.MyAction"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
为了打开这个 activity 我正在使用 :
Intent intent = new Intent("com.package.name.MyAction");
startActivity(intent);
现在,如果我的设备有两种产品风格的 apk,选择器会为某些设备打开哪个 activity 应用程序,对于某些设备它会显示错误 no app found to perform the action
。
一旦我卸载了一个应用程序,并在我的设备中只保留了一个应用程序,一切正常。
我想克服的一个解决方案是,使动作恒定为 Intent intent = new Intent("com.package.name.MyAction");
context.startActivity(intent);
动态。但是我不确定我该怎么做。
我是 AndroidManifest,它应该是这样的:
<action android:name="com.package.name.MyAction"+getString(R.string.product_name)/>
这是我无法在 AndroidMaifest
中获取字符串的部分。
打开 activity 我做了:
Intent intent = new Intent("com.package.name.MyAction"+getString(R.string.product_name));
startActivity(intent);
任何帮助将不胜感激,谢谢。
在您的 build.gradle
(应用)中,像这样配置您的口味:
productFlavors {
first {
// ...
manifestPlaceholders = [action: "com.package.name.ActionA"]
}
second {
// ...
manifestPlaceholders = [action: "com.package.name.ActionB"]
}
}
然后将占位符的值放在AndroidManifest.xml
文件中:
<activity android:name=".MyActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="${action}"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
为了让占位符打开activity,只需通过BuildConfig
:
String yourAction = BuildConfig.action;
// start your intent here