如果可以的话,我正试图弄清楚如何向主屏幕发送一个意图添加一个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);
}
感谢任何有贡献的人。
答案 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中的评论显示:
/ ** 我们可能会在以后充实它,以处理允许外部应用程序放置小部件,但是现在, 我们只想揭露其他地方的行动。 * /