android显式意图名称不解析为其他活动

我有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

点赞