无法在广播接收器中使用意图过滤器列出应用程序

3

我想列出具有相同意图过滤器的应用程序。我可以通过将意图过滤器添加到一个活动中来实现这一点。

         <activity
            android:name=".Activities.MainActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustNothing">

            <intent-filter>
                <action android:name="com.example.identifier" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="isApp" />
            </intent-filter>
        </activity>

我可以使用以下方法检索所有包含此意图的应用程序:

        String uri = "isApp:";
        Intent intent = new Intent("com.example.identifier",
                Uri.parse(uri));
        PackageManager manager = getPackageManager();
        List<ResolveInfo> list = manager.queryIntentActivities(intent, 0);

然而,使用以下代码片段在intentChoose中显示时,这将启动该活动:
Intent zoneIntent = new Intent("com.example.identifier",
                    Uri.parse(uri));
            Intent openInChooser = Intent.createChooser(zoneIntent, "Complete Action with").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(openInChooser);

但是我希望它能调用广播接收器。因此,我将意图移动到AndroidManifest.xml中的广播接收器中,如下所示:

<receiver
            android:name=".ExampleReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.example.identifier" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="isApp" />
            </intent-filter>
        </receiver>

现在返回具有此意图的应用程序数量的代码片段即使该应用程序仍然在设备上也返回0。这是否可以通过广播接收器完成,还是我应该考虑其他方法。谢谢。

1个回答

1
调用queryIntentActivities()只会返回Activity,不会返回BroadcastReceiver。如果您想使用BroadcastReceiver实现此功能,则需要调用queryBroadcastReceivers()

但是,当我在活动中使用intentfilter时,Intent zoneIntent = new Intent("com.example.identifier", Uri.parse(uri)); Intent openInChooser = Intent.createChooser(zoneIntent, "Complete Action with").setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(openInChooser); 不会显示这些应用程序。 - Belvi Nosakhare
没错,因为“Chooser”只能找到Activity,而不能找到BroadcastReceiver - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接