我使用了不同的产品口味,并通过如下所示预定义动作的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>
我要使用以下方法打开此活动:
Intent intent = new Intent("com.package.name.MyAction");
startActivity(intent);
现在,如果我的设备同时具有两种产品口味apk,则选择器将针对某个设备打开哪个活动应用程序,对于某些设备则显示错误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
中获取字符串的部分。
要打开活动,我已经完成:
Intent intent = new Intent("com.package.name.MyAction"+getString(R.string.product_name));
startActivity(intent);
任何帮助将不胜感激,谢谢。
答案 0 :(得分:3)
在您的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>
为了让占位符打开活动,只需通过BuildConfig
进行操作即可:
String yourAction = BuildConfig.action;
// start your intent here