android - 发送 Intent 到 Home 和 Widget Add

标签 android widget homescreen

如果可以的话,我正在尝试弄清楚如何向主屏幕发送 Intent 以向其添加小部件。有任何想法吗?这是我一直在闲逛的一些代码,至少可以提示“添加小部件”选择。

AppWidgetManager mAppWidgetManager;
AppWidgetHost mAppWidgetHost;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    selectWidget();

    mAppWidgetManager = AppWidgetManager.getInstance(this);
    mAppWidgetHost = new AppWidgetHost(this, R.id.APPWIDGET_HOST_ID);
}

void selectWidget() {
    int appWidgetId = this.mAppWidgetHost.allocateAppWidgetId();
    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    startActivityForResult(pickIntent, R.id.REQUEST_PICK_APPWIDGET);
}

感谢所有做出贡献的人。

最佳答案

您可以将 ACTION_APPWIDGET_PICK Intent 发送到系统,但您的应用程序无法处理它,除非您正在编码的是主屏幕替换,即启动器。

查看 App Widget Host 的文档,特别是关于 Host Binding 的部分。您在 selectWidget() 方法中使用的代码与原始 Launcher 应用中使用的代码相同(在标题在 Android 4.0 及更低版本上绑定(bind)应用小部件下)。然后是 onActivityResult 的实现,其中处理 Intent 。您的代码中缺少此方法,但如果包含它,您最终将完成主屏幕应用程序所做的所有工作(请参阅该页面接下来的 addAppWidget(Intent data))。

如果您继续阅读 App Widget Host 文档,您将看到 Android 4.1 上的绑定(bind)过程发生了变化,并且此任务还有一个新 Intent ,需要 list 中的权限。让事情变得更复杂的是,请记住 @CommonsWare 的评论:有很多主屏幕实现,它们可能会以不同的方式执行绑定(bind)过程:(

总结一下:不幸的是,没有办法获取应用程序小部件列表并处理用户选择的内容,也没有办法要求启动器应用程序为我们执行此操作。也许在未来的 Android 版本中,正如 latest Launcher source code 中的评论那样揭示:

/** We will likely flesh this out later, to handle allow external apps to place widgets, but for now, we just want to expose the action around for checking elsewhere. */

关于android - 发送 Intent 到 Home 和 Widget Add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16510595/

相关文章:

android - Quickblox Android sdk 2.0 Beta 缺少一些类

android - 如何从 Android Widget 创建快捷方式?

javascript - 可点击工具提示内的 jQuery 多选小部件

windows-mobile - 如何以编程方式更改 Windows Mobile 主屏幕

android - 如何为 Android 创建自定义主屏幕替换应用程序?

android - getDeviceList() 始终为空

android - 在 Android 设备中运行 Expo/React Native

android - Gradle构建守护进程意外消失了……Android Studio 4.0.1

c++ - 如何隐藏Qt widget应用程序菜单栏?

ios - 如何从 ios 主屏幕上的书签图标返回到应用程序?