android-通过代码重新添加时,小部件不响应

android-通过代码重新添加时,小部件不响应,第1张

概述我正在开发启动器.它使用户可以从列表中添加小部件,效果很好.当用户在屏幕上添加小部件时,我将有关小部件的信息(PackageName,ClassName及其在屏幕上的坐标)存储在数据库中.重新启动应用程序(或设备本身)时,我通过代码将这些(用户选择的)小部件添加回去://APPWIDGET_HOST_IDis

我正在开发启动器.它使用户可以从列表中添加小部件,效果很好.
当用户在屏幕上添加小部件时,我将有关小部件的信息(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-通过代码重新添加时,小部件不响应所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存