android – 应用程序小部件setImageViewUri不会更新图像

前端之家收集整理的这篇文章主要介绍了android – 应用程序小部件setImageViewUri不会更新图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序小部件,它只包含一个图像视图.我重新绘制该图像,并将其存储在应用程序的私有内存中,然后使用uri(widget.set ImageViewUri(R.id.widget_icon,uri))设置RemoteViews的图像,而不是发送自己的位图,因为非常罕见我得到的情况!失败的BINDER交易!

问题是,随着图像随时间的变化,窗口小部件的图像不会改变.我使用root资源管理器检查保存的png,并正确更新.但不显示正确的图像.每个小部件显示添加到主屏幕的时间的图像.如果我使用setImageViewBitmap(…)它可以正常工作,除了罕见的失败的binder事务.

我使用下面的方法从服务更新窗口小部件.它不适用于Android 2.3.7,并且运行于2.2的模拟器.可能是什么问题呢?它是否以某种方式缓存?

public void updateWidget(Context context) {
  // redraws the widget's image
  updateIcon();

  OutputStream stream;
  try {
    stream = context.openFileOutput("icon.png",Context.MODE_WORLD_READABLE);
  }
  catch (FileNotFoundException ex) {
    ex.printStackTrace();
    return;
  }

  m_Icon.compress(CompressFormat.PNG,100,stream);

  try {
    stream.close();
  }
  catch (IOException ex) {
    ex.printStackTrace();
  }

  AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
  int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context,WidgetProvider.class));

  Intent intent = new Intent(context,MyDialog.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  PendingIntent clickIntent = PendingIntent.getActivity(context,intent,0);

  File file = new File(context.getFilesDir().getAbsolutePath() + File.separator + "icon.png");
//      Uri uri = Uri.fromFile(file);

  // update all widgets on home screen
  for (int wid : appWidgetIds) {
    RemoteViews widget = new RemoteViews(context.getPackageName(),R.layout.widget);
    widget.setOnClickPendingIntent(R.id.widget_layout,clickIntent);

    // === EDIT ===
    // Uri.fromFile(file); does not work correctly on android 2.1,only 2.2 and up
    // widget's image will disappear
//        widget.setImageViewUri(R.id.widget_icon,uri);
    widget.setImageViewUri(R.id.widget_icon,Uri.parse(file.getPath()));

    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,wid);

    appWidgetManager.updateAppWidget(wid,widget);
  }
}

编辑:
我也尝试过一个自定义的ContentProvider并设置“content:// …”uri,但结果相同.该小部件显示添加到主屏幕时的图像,并且不会随时间更新.

logcat不显示任何错误.

解决方法

如果Uri保持不变,Android似乎不会更新图像.我发现了一个黑客来解决这个问题.只需调用widget.setImageViewUri(R.id.widget_icon,Uri.parse(“”));之前的widget.setImageViewUri(R.id.widget_icon,uri);.

调用setImageViewUri()两次,但似乎工作正常.我很乐意听到一个更好的方法解决它,因为我自己遇到这个问题.

猜你在找的Android相关文章