我在自定义启动器中添加小组件时遇到了一些问题。
我已经能够通过AppWidgetManager生成要添加的小组件列表,并开发了将小组件添加到我的主屏幕的工作流程。 代码不完全如下所示,但类似于以下内容:
AppWidgetHost widget_host = new AppWidgetHost(this, 1);
AppWidgetManager widget_manager = AppWidgetManager.getInstance(this);
int widget_id = widget_host.allocateAppWidgetId();
AppWidgetProviderInfo widget_provider = ... //from an array;
Intent bindIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id);
bindIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, widget_provider.provider);
startActivityForResult(bindIntent, REQUEST_BIND_APPWIDGET);
if (widget_provider.configure != null) {
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
intent.setComponent(widget_provider.configure);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id);
startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);
} else {
createWidget(widget_id);
}
我随后有一个onActivityResult方法,如果需要,则会导致小部件配置,createWidget方法使用AppWidgetHost的createView方法。
这个工作流程可以运行,但ACTION_APPWIDGET_BIND意图会要求用户允许绑定应用程序,这有点烦人。我的理解是只有系统应用程序才能请求此权限,并且在应用程序运行时无法绑定小部件而不请求此权限。另一方面,我知道有许多其他启动器可用,它们都可以无缝添加小部件,因此必须有另一种方法来解决这个问题。
任何建议都将不胜感激!
干杯