0

给定应用程序包名称如何知道该应用程序是否支持主屏幕上的小部件?

4

2 回答 2

0

使用 PackageManager 并调用getPackageInfo(packageName, GET_RECEIVERS)应用程序。

遍历所有并PackageInfo.receivers调用.PackageManager.getReceiverInfo(componentName, GET_META_DATA)ActivityInfoPackageInfo.receivers

看场metadata。这可能是 null 或者它可能包含一个 Bundle。如果它包含一个 Bundle,请在 Bundle 中查找带有 key 的项目"android.appwidget.provider"。如果您发现,那么您可以非常确定该应用程序支持主屏幕上的小部件。

于 2012-08-27T15:32:00.130 回答
0

David Wasser 的解决方案也是我的第一个猜测,但它未能检测到我的一个小部件。如果第一种方法不适合您,这是另一种方法。

您可以列出 ACTION_APP_WIDGET_UPDATE 操作的所有接收器,所有主屏幕小部件都应收听,然后按包名称过滤:

    PackageManager pm = getPackageManager();
    Intent intent = new Intent();
    intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);

    List<ResolveInfo> list = pm.queryBroadcastReceivers(intent, 0);

    for (ResolveInfo info : list) {
        Log.i("package", info.activityInfo.packageName);
    }
于 2012-08-27T15:40:53.750 回答