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