【发布时间】:2017-04-21 22:41:22
【问题描述】:
仅在 android 7.1.2 上,如果我在同一设备上安装了多个我的应用变体,我将无法在我的应用中启动隐式 Intent。
我有同一个应用程序的多个应用程序变体,每个应用程序具有不同的 applicationId,但具有相同的 java 包。
在 build.gradle 中:
android {
defaultConfig.applicationId 'com.myapp.appid'
buildTypes {
debug.applicationIdSuffix 'foo'
beta.applicationIdSuffix 'bar'
}}
在 AndroidManifest.xml 中,我定义了一个活动,我将在我的应用程序中隐式启动它
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.myapp.mypackage">
<application
android:name="com.myapp.mypackage.MyApplication">
<activity
android:name="com.myapp.mypackage.MyActivity">
<intent-filter>
<action android:name="com.myapp.mypackage.MyActivity" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
我在 java 中这样开始这个活动:
Intent i = new Intent();
i.setAction("com.myapp.mypackage.MyActivity");
ActivityCompat.startActivity( activity, intent, bundle );
在同一设备上安装“调试”和“测试版”构建类型后,7.1.2 之前的 startActivity 可以正常工作,用户甚至无需选择应用程序来处理 ResolveActivity 中的意图。现在在 7.1.2 中,ResolveActivity 应用选择器打开为空并显示“没有应用可以执行此操作。”
当我观察结果时
getPackageManager().queryIntentActivities( i, PackageManager.MATCH_DEFAULT_ONLY );
我确实看到了两个已安装的版本
com.myapp.appid.foo/com.myapp.mypackage.MyActivity
com.myapp.appid.bar/com.myapp.mypackage.MyActivity
【问题讨论】:
-
尝试给你的应用一个名字标签
-
谢谢阿拉什。我的应用程序确实有一个名称标签。为了简洁起见,我只是把它留在了这里。很抱歉造成混乱。
-
这是 Android 中的一个错误。此处已报道:issuetracker.google.com/issues/37576886
标签: android android-intent android-activity android-support-library android-7.1-nougat