【发布时间】:2012-12-22 05:46:05
【问题描述】:
在我一直在使用的自定义启动器中将小部件添加到主屏幕时遇到一些问题。
我已经能够生成要使用 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 意图要求用户授予绑定应用程序的权限,这有点烦人。我的理解是,只有系统应用程序才能请求此权限,并且我在绑定小部件时运气不佳,而在应用程序运行时不请求此权限。另一方面,我知道还有许多其他启动器,它们都可以无缝添加小部件,因此必须有另一种方法。
任何建议将不胜感激!
干杯
【问题讨论】:
-
您找到解决问题的方法了吗?