我正在开发启动器.它使用户可以从列表中添加小部件,效果很好.
当用户在屏幕上添加小部件时,我将有关小部件的信息(Packagename,Classname及其在屏幕上的坐标)存储在数据库中.
重新启动应用程序(或设备本身)时,我通过代码将这些(用户选择的)小部件添加回去:
// APPWidget_HOST_ID is any number you likeappWidgetManager = AppWidgetManager.getInstance(this);appWidgetHost = new AppWidgetHost(this, APPWidget_HOST_ID);appwidgetproviderInfo newappwidgetproviderInfo = new appwidgetproviderInfo();// Get an IDint appWidgetID = appWidgetHost.allocateAppWidgetID();// Get the List of installed WidgetsList<appwidgetproviderInfo> appWidgetInfos = new ArrayList<appwidgetproviderInfo>();appWidgetInfos = appWidgetManager.getInstalledProvIDers();for(int j = 0; j < appWidgetInfos.size(); j++){ if (appWidgetInfos.get(j).provIDer.getPackagename().equals(Packagename) && appWidgetInfos.get(j).provIDer.getClassname().equals(Classname)) { // Get the full info of the required Widget newappwidgetproviderInfo = appWidgetInfos.get(j); break; } }// Create WidgetAppWidgetHostVIEw hostVIEw = appWidgetHost.createVIEw(this, appWidgetID, newappwidgetproviderInfo);hostVIEw.setAppWidget(appWidgetID, newappwidgetproviderInfo);// Add it to your layoutrelativeLayout WidgetLayout = (relativeLayout) findVIEwByID(R.ID.WidgetLayout);WidgetLayout.addVIEw(hostVIEw);
该小部件已成功添加到布局,但似乎未启用/更新.尽管我输入了以下内容,但它不响应点击(例如,模拟时钟),也不显示任何数据(例如,音乐播放器小部件):
@OverrIDeprotected voID onStart() { super.onStart(); appWidgetHost.startListening();}@OverrIDeprotected voID onStop() { super.onStop(); appWidgetHost.stopListening();}
我已经坚持了很长时间.搜索了很多,但似乎我是这个问题上世界上唯一的一个.
解决方法:
我们可以调用一个对话框,要求用户允许我们的应用程序使用以下代码绑定小部件ID:
Intent intent = new Intent(AppWidgetManager.ACTION_APPWidget_BIND);intent.putExtra(AppWidgetManager.EXTRA_APPWidget_ID, sSavedWidgetID);intent.putExtra(AppWidgetManager.EXTRA_APPWidget_PROVIDER, mWidgetInfo.provIDer);startActivityForResult(intent, REQUEST_BIND_Widget);
并绑定窗口小部件ID,以使其实际使用:
Bundle opts = new Bundle();opts.putInt(AppWidgetManager.OPTION_APPWidget_MIN_WIDTH, maxWIDth);opts.putInt(AppWidgetManager.OPTION_APPWidget_MIN_HEIGHT, minHeight);opts.putInt(AppWidgetManager.OPTION_APPWidget_MAX_WIDTH, maxWIDth);opts.putInt(AppWidgetManager.OPTION_APPWidget_MAX_HEIGHT, maxHeight);WidgetManager.bindAppWidgetIDIfAllowed(WidgetID, mWidgetInfo, opts);
有关更多信息,请参阅:
> AppWidgetManager.ACTION_APPWIDGET_BIND
> AppWidgetManager.bindAppWidgetIdIfAllowed()
我希望有人会在5年前回答同样的问题.
总结以上是内存溢出为你收集整理的android-通过代码重新添加时,小部件不响应全部内容,希望文章能够帮你解决android-通过代码重新添加时,小部件不响应所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)