如何获取已安装的小部件列表?

lor*_*off 7 android android-appwidget

我正在尝试阅读Android上可用的主屏幕小部件列表.我可以使用可用的应用程序列表填充网格

Intent myIntent = new Intent(Intent.ACTION_MAIN, null);
myIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> appsInfo = MyActivity.getPackageManager().queryIntentActivities(myIntent, 0);
Run Code Online (Sandbox Code Playgroud)

而不是遍历每个ResolveInfo.
如何使用可用的主屏幕小部件进行相同的操作?我想用一个显示的相同列表填充一个网格,继续触摸屏幕并从显示的弹出窗口中选择"小部件".

Akh*_*ain 12

正如CommonsWare所建议的,这是用于提取小部件列表的工作代码

AppWidgetManager manager = AppWidgetManager.getInstance(this);
List<AppWidgetProviderInfo> infoList = manager.getInstalledProviders();
for (AppWidgetProviderInfo info : infoList) {
    Log.d(TAG, "Name: " + info.label);
    Log.d(TAG, "Provider Name: " + info.provider);
    Log.d(TAG, "Configure Name: " + info.configure);
}
Run Code Online (Sandbox Code Playgroud)

可以提取各种其他值,有关更多参考,请参阅AppWidgetProviderInfo


Com*_*are 8

打电话getInstalledProviders()AppWidgetManager.

  • @Bobbobbington:如果设备上有很多“AppWidgetProviders”,就会发生这种情况。您的进程中的所有并发 IPC 操作都有 1MB 限制,因此如果 `getInstalledProviders()` 的结果超过 1MB,您将收到此异常。即使“getInstalledProviders()”列表较小,如果您碰巧在进程中的其他 IPC 正在进行时调用它(并消耗一些 1MB 限制),您也会收到此异常。 (2认同)