将意图发送到主页和小部件添加

时间:2013-05-12 18:17:39

标签: android widget homescreen

如果可以的话,我正试图弄清楚如何向主屏幕发送一个意图添加一个Widget。有任何想法吗?以下是我一直在讨论的一些代码,至少提示添加窗口小部件选择。

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

感谢任何有贡献的人。

1 个答案:

答案 0 :(得分:4)

您可以将ACTION_APPWIDGET_PICK意图发送给系统,但您的应用无法处理它,除非您编码的是主屏幕替换,即启动器。

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

如果您继续阅读App Widget Host文档,您将看到Android 4.1上的绑定过程已更改,并且此任务还有一个新的意图,需要清单中的权限。更复杂的是,请记住@CommonsWare的评论:有很多主屏幕实现,可能会以不同的方式进行绑定:(

总结一下:遗憾的是,无法获取应用小部件列表来处理用户选择的内容,也不是要求启动器应用为我们执行此操作的方法。也许在未来的Android版本中,latest Launcher source code中的评论显示:

  

/ **   我们可能会在以后充实它,以处理允许外部应用程序放置小部件,但是现在,   我们只想揭露其他地方的行动。 * /