当前位置: 代码迷 >> Android >> 无法使用广播接收器中的意图过滤器列出应用程序
  详细解决方案

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

热度:11   发布时间:2023-08-04 10:15:15.0

我想列出应用程序(具有相同的意图过滤器)。 我能够通过向活动添加意图过滤器来实现这一目标

         <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 它不会返回BroadcastReceiver 如果您想使用BroadcastReceiver执行此操作,则需要调用queryBroadcastReceivers()

  相关解决方案