Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓名称明确意图不解析为其他活动_Android_Android Intent_Android Manifest_Intentfilter - Fatal编程技术网

Android 安卓名称明确意图不解析为其他活动

Android 安卓名称明确意图不解析为其他活动,android,android-intent,android-manifest,intentfilter,Android,Android Intent,Android Manifest,Intentfilter,我有两个应用程序可以相互配合使用。我想创建一个从应用程序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); 其中u

我有两个应用程序可以相互配合使用。我想创建一个从应用程序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-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>
我在这里俯瞰什么?我尝试使用
pathPattern
代替路径前缀,但没有成功


编辑:为了提供更多的细节,我不只是想启动特定的活动,我想匹配与该活动相关联的特定意图来启动活动。我不想直接启动活动,因为如果用户的应用程序已过期,因为它将没有所需的行为。

通过Package manager执行此操作的最佳方法如下

 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

您需要使用以下代码使用自定义操作启动其他应用程序

Intent intent = new Intent();
intent.setAction("com.org.orgmobile.android.action.ACTION_CUSTOM");
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setData(Uri.parse(url));
startActivity(intent);
还要确保两个应用程序都已安装。此外,最好进行如下检查,以确保手机上存在用于处理此类意图的应用程序

PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
        PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;

您需要使用
pathPattern
而不是
pathPrefix
。此外,您应该在模式末尾使用
*
而不是
*

<data android:pathPattern="/mobile/Support/action/${manifestplaceholderattr}.*/ActionEnumValue/.*"/>

这也可能不起作用。如果我记得,
pathPattern
不是真正的正则表达式,您可能无法像这样匹配URL。试试看。如果这不起作用,您可能只需要依赖路径的第一部分。让我知道进展如何


查看
路径
路径模式
路径前缀

能否提供错误消息的完整版本。我在问题中添加了堆栈跟踪,但没有提供更多的见解是的,我实际上希望看到这部分的完整版本:
dat=https://org.org.com/... flg=0x20000000}
我在调试器中捕捉到了它,不幸的是,这就是你的AndroidManifest的更多内容。捕捉到的是,我不只是想在存在包的情况下启动它,我想完全匹配意图过滤器。如果用户的客户端版本较旧,不支持此操作,则我不想启动该活动该意图仍无法解析为其他应用程序的活动。我在这里不知所措。
<data android:pathPattern="/mobile/Support/action/${manifestplaceholderattr}.*/ActionEnumValue/.*"/>