如何从我的应用程序将小部件添加到 Android 主屏幕?

Posted

技术标签:

【中文标题】如何从我的应用程序将小部件添加到 Android 主屏幕?【英文标题】:How to add a widget to the Android home screen from my app? 【发布时间】:2013-04-12 15:05:30 【问题描述】:

我正在编写一个应用程序,当用户指示我的应用程序这样做时,它应该能够将小部件(只是文本框)添加到用户手机的主屏幕。我怎么能做这样的事情?

我知道我可以添加一个应用小部件,但要添加更多吗?

【问题讨论】:

Binding AppWidgets to AppWidgetHost - android的可能重复 @rds 看起来这实际上应该是另一个的欺骗目标。这个有更多有用的答案,并且被查看的次数大约是另一个的两倍。见这里:meta.***.com/questions/252929/… 如何添加App Widget?我需要它,但不知道怎么做。 【参考方案1】:

无法从应用程序将小部件放置在主屏幕中。只有主屏幕可以将应用小部件添加到主屏幕。

类似链接link1、link2、link3

但您可以让用户从 widgetpicker 中选择小部件。

    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetID);
    startActivityForResult(pickIntent, KEY_CODE);

【讨论】:

@AdamArold 如果您希望用户决定添加小部件,我认为 StineSpike 的回答是正确的。也许你应该接受他的回答? 好的。我完全忘记了这个问题。 如何获取 AppWidgetID 和 KEY_CODE? 你能把选择器“引导”到你的小部件上吗? 选择器对我不起作用。看起来,但是当你选择什么都没有发生时,我尝试了几件事 EXTRA_APPWIDGET_ID 但没有运气。我想我的问题是我的应用不是启动器,而是带有小部件的常规应用。【参考方案2】:

这是很久以前回答的,但如果有人偶然发现这个问题,我认为我应该提供一个最新的答案。

从 Android O (API 26) 开始,您现在可以将小部件从您的应用固定到用户的启动器!

只需在应用的 AndroidManifest 文件中创建小部件并使用 AppWidgetManager 请求将小部件固定到启动器。请注意,是否支持此功能取决于启动器,因此您必须在请求固定之前调用 AppWidgetManager 的isRequestPinAppWidgetSupported() 方法。

以下是来自 Google 的一些更详细的文档:https://developer.android.com/preview/features/pinning-shortcuts-widgets.html#widgets

希望这会有所帮助!

编辑:自从我发布此答案以来,文档页面似乎发生了变化。这是一个更有用的链接,它提供了如何将小部件固定到启动器的代码示例:https://developer.android.com/guide/topics/appwidgets/#Pinning

【讨论】:

好吧,我读了它,但我认为这不是 OP 所要求的。他想以编程方式在主屏幕上添加小部件。您的链接仅描述了添加快捷方式 - 这基本上是主屏幕上的 ICON 执行特定操作(也可以在应用程序内完成)。但我根本找不到在主屏幕上实际添加小部件的任何提及 @qkx - 自我发布此答案以来,文档页面似乎发生了变化。我已编辑答案以包含更有用的链接。【参考方案3】:

AFAIK 默认启动器应用程序不支持此功能。原因是用户应该自己将所有内容放在主屏幕上。允许从应用程序中放置小部件将为应用程序使用其“有用的”小部件向用户的家“发送垃圾邮件”打开大门。

【讨论】:

我正在尝试以需要用户交互来放置小部件的方式编写它。

以上是关于如何从我的应用程序将小部件添加到 Android 主屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

如何将小部件动态添加到网格?

QDialog 在添加新小部件时将小部件涂成黑色

如何有条件地将小部件添加到列表中?

netbeans:如何将小部件添加到 QT 变量

如何将小部件添加到 Dojo gridx/Grid 标题?

如何打开启动器的小部件选择器?