我怎样才能找到所有与特定意图过滤包?(How can I find all the packages

2019-09-28 10:01发布

我需要得到所有已安装的软件包,其名称与所的名称com.mridang 。 为了做到这一点,我使用的是下面的代码片断线的东西:

for (PackageInfo pkgPackage : mgrPackages.getInstalledPackages(0)) {
    if (pkgPackage.applicationInfo.packageName.startsWith("com.mridang.")) {
        System.out.println(pkgPackage.applicationInfo.packageName);
    }
}

我只需要得到那些具有包含以下意图过滤服务包的名称com.google.android.apps.dashclock.Extension

以下是对例子包清单文件的一个片段:

    <service
        android:name="com.mridang.storage.StorageWidget"
        android:icon="@drawable/ic_dashclock"
        android:label="@string/extension_name"
        android:permission="com.google.android.apps.dashclock.permission.READ_EXTENSION_DATA" >
        <intent-filter>
            <action android:name="com.google.android.apps.dashclock.Extension" />
        </intent-filter>

    </service>

我怎样才能做到这一点?

Answer 1:

你可以做到这一点PackageManager#queryIntentServices

    Intent intent = new Intent("com.google.android.apps.dashclock.Extension");
    for (ResolveInfo info : mgrPackages.queryIntentServices(intent, 0)) {
        String packageName = info.serviceInfo.applicationInfo.packageName;
        // you can then filter by packageName.startsWith("com.mridang");
        Log.d("Packages", "package = " + packageName);
    }

希望帮助



文章来源: How can I find all the packages with a particular intent filter?