不能在Broadcast Receiver中列出使用意图过滤器的应用



我想列出应用程序(具有相同的意图过滤器)。我能够通过向活动

添加意图过滤器来实现这一点
         <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,即使该应用仍在该设备上。这可以用广播接收器完成,或者我应该考虑另一种方法。谢谢。

调用queryIntentActivities()将只返回Activity s。它不会返回BroadcastReceiver s。如果您想使用BroadcastReceiver s执行此操作,则需要调用queryBroadcastReceivers()

相关内容

最新更新