【问题标题】:How to obtain the installed widget list?如何获取已安装的小部件列表?
【发布时间】:2010-11-25 11:32:20
【问题描述】:

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

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

而不是遍历每个 ResolveInfo。
如何对可用的主屏幕小部件执行相同操作?我想用相同的列表填充一个网格,不断触摸屏幕并从出现的弹出窗口中选择“小部件”。

【问题讨论】:

    标签: android android-appwidget


    【解决方案1】:

    根据 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);
    }
    

    可以提取各种其他值,更多参考见AppWidgetProviderInfo

    【讨论】:

    • 是否可以通过此获取关联小部件的图标?
    • @RandyFreak 是的,我们可以从中提取图标
    • 请问我如何从我的应用程序中启动小部件?
    • @BeeingJk 你到底是什么意思,从你的应用程序启动小部件或查找并运行你创建的小部件..?
    • @BeeingJk 这可能会对您的查询有所帮助 - stackoverflow.com/a/8837570/1225413
    【解决方案2】:

    AppWidgetManager 上致电getInstalledProviders()

    【讨论】:

    • 非常感谢!这样做!
    • 这有时会抛出 android.os.TransactionTooLargeException。我不知道为什么...
    • @Bobbobbington:如果设备上有很多AppWidgetProviders,就会发生这种情况。您的进程中所有同时进行的 IPC 操作有 1MB 的限制,因此如果getInstalledProviders() 的结果超过 1MB,您将收到此异常。即使 getInstalledProviders() 列表更小,如果您在进程中的其他 IPC 正在进行时调用它(并且消耗了 1MB 限制中的一部分),您也会收到此异常。
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2010-09-12
    • 2012-03-09
    相关资源
    最近更新 更多