1

次のコードは空のリストを返しますが、それを実行しているアプリにはこの特定のインテントが登録されています!?

pm.queryBroadcastReceivers(new Intent(Intent.PACKAGE_REPLACED), PackageManager.GET_INTENT_FILTERS | PackageManager.GET_DISABLED_COMPONENTS);

そのようなインテントや他の同様のインテントのすべてのレシーバーを取得する方法はありますか?

この方法は非常に信頼できないようです、または私は何か間違ったことをしましたか?

ありがとう。

4

2 に答える 2

2

多くの調査の後、ここのソースコードだけがこれに関するいくつかの洞察を提供しました:

インテントでアクションを指定するだけの場合、API は、データ型やスキームなしでそのようなアクションを受け入れるすべてのレシーバーをフィルタリングします。

PACKAGE_* アクションの「パッケージ」スキームなど、多くのアクション インテントにはスキームまたはデータ型が必要であることが判明しました。

そのため、インテントは「パッケージ」スキームを指定する必要があります。

于 2013-03-13T03:54:55.723 に答える
0

次のようなコードを使用して情報を取得できます

List<String> startupApps = new ArrayList<String>();
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED);
Uri uriInfo = Uri.parse("package://");
intent.setData(uriInfo);
final List<ResolveInfo> activities = packageManager
                .queryBroadcastReceivers(intent, 0);
for (ResolveInfo resolveInfo : activities) {
        ActivityInfo activityInfo = resolveInfo.activityInfo;
        if (activityInfo != null)
            startupApps.add(activityInfo.name);
}
于 2015-01-09T13:23:23.820 に答える