鉴于应用程序包名称如何知道该应用程序是否支持主屏幕上的小部件?
答案 0 :(得分:0)
使用PackageManager并为应用程序调用{{1}}。
遍历所有getPackageInfo(packageName, GET_RECEIVERS)
并为PackageInfo.receivers
中的每个PackageManager.getReceiverInfo(componentName, GET_META_DATA)
对象致电ActivityInfo
。
查看字段PackageInfo.receivers
。这可能为null或者可能包含Bundle。如果它包含一个Bundle,请在Bundle中查找一个带有键metadata
的项目。如果你发现那么你可以非常肯定应用程序支持主屏幕上的小部件。
答案 1 :(得分:0)
David Wasser的解决方案也是我的第一个猜测,但它未能检测到我的一个小部件。 如果第一种方法不适合你,这是另一种方法。
您可以列出ACTION_APP_WIDGET_UPDATE操作的所有接收器,allhome屏幕小部件应该监听这些接收器,然后按包名称进行过滤:
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);
}