我有2个应用程序彼此结合使用.我想创建一个从应用B启动应用A的按钮,所以我在应用B中创建了这样的意图:
Intent intent = new Intent("com.org.orgmobile.android.action.ACTION_CUSTOM");
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setData(Uri.parse(url));
startActivity(intent);
url是https://org.org.com/mobile/Support/action/org/ActionEnumValue/?a=123
我在应用程序A的清单中声明的intent过滤器是这样的:
<intent-filter>
<action android:name="com.org.orgmobile.android.action.ACTION_CUSTOM"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="https"/>
<data android:host="org.org.com"/>
<data android:pathPrefix="/mobile/Support/action/${manifestplaceholderattr}.*/ActionEnumValue/*"/>
</intent-filter>
和manifestplaceholderattr是一个空字符串.
我正进入(状态
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.org.orgmobile.android.action.ACTION_CUSTOM dat=https://org.org.com/... flg=0x20000000 }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1936)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1615)
at android.app.Activity.startActivityForResult(Activity.java:4472)
at android.app.Activity.startActivityForResult(Activity.java:4430)
at android.app.Activity.startActivity(Activity.java:4791)
at android.app.Activity.startActivity(Activity.java:4759)
我在这里俯瞰什么?我尝试使用pathPattern而不是路径前缀,但没有成功.
编辑:为了提供更多细节,我不只是想启动那个特定的活动,我想匹配与该活动相关的特定意图来启动活动.我不想直接启动活动,因为用户的应用程序已过期,因为它没有所需的行为.
最佳答案 通过包管理器执行此操作的最佳方法如下.
PackageManager manager = getPackageManager();
try {
Intent intent = manager.getLaunchIntentForPackage("app B package name here");
if (intent == null)
throw new PackageManager.NameNotFoundException();
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
包管理器检查是否安装了具有给定包名称的应用程序,如果存在则启动应用程序,否则它将抛出NameNotFoundException