Widget de aplicación setImageViewUri no actualiza la imagen

Tengo un widget de aplicación, que contiene sólo una imagen. I redibujar esa imagen y almacenar como png en la memoria privada de las aplicaciones y luego establecer la imagen de las RemoteViews con el uri (widget.setImageViewUri (R.id.widget_icon, uri)) en lugar de enviar el mapa de bits a sí mismo, porque en muy raro Situaciones i obtener! ¡TRANSACCIÓN DE BINDER FALLADA !!!

El problema es que a medida que la imagen cambia con el tiempo, la imagen del widget no cambia. Revisé el png guardado con el explorador de raíz y se actualiza correctamente. Pero la imagen correcta no se muestra. Cada widget muestra la imagen desde el momento en que se agregó a la pantalla de inicio. Si yo uso setImageViewBitmap (…) funciona correctamente, excepto la rara transacción de enlace fallido.

I actualizar el widget de un servicio con el método siguiente. No funciona en android 2.3.7 y también con el emulador que ejecuta 2.2. ¿Cual podría ser el problema? Es de alguna manera en caché?

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, 0, 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); } } 

EDIT: También he intentado un Custom ContentProvider y la configuración de "content: // …" uri, pero con el mismo resultado. El widget muestra la imagen desde el momento en que se agregó a la pantalla de inicio y no se actualiza con el tiempo.

Logcat no muestra ningún error.

Si el Uri permanece sin cambios, parece que Android no actualizará la imagen. He encontrado un poco de un hack para evitar esto. Simplemente llame a widget.setImageViewUri(R.id.widget_icon, Uri.parse("")); Antes de widget.setImageViewUri(R.id.widget_icon, uri); .

Llama a setImageViewUri() dos veces, pero parece estar funcionando bien. Me encantaría oír una mejor manera de solucionarlo, ya que estoy experimentando este problema yo mismo.

Bueno, parece que setImageViewUri almacena imágenes en caché y no las actualiza si tienen el mismo nombre.

No es la solución más elegante pero funciona, cada vez que usará un nombre de archivo diferente.

 String filename = new String("bitmap-1.png"); // rotate files, due to not being refreshed if same name if ( context.deleteFile(filename) ) { filename = new String("bitmap-0.png"); } FileOutputStream out = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); bitmap.compress(Bitmap.CompressFormat.PNG, 80, out); file = context.getFileStreamPath(filename); out.close(); updateViews.setImageViewUri(R.id.image1,Uri.parse(file.toString())); 
  • ¿Cómo almacenar datos para un widget?
  • Uso de AlarmManager para actualizar widgets manualmente
  • Cómo configurar correctamente un icono de widget grande en android
  • Android equivalente de UIWebView en Xcode
  • Notificación de Android después de que la aplicación está instalada en el dispositivo - ¿Cómo?
  • Android Widget usando Cordova
  • Android Widget onReceive no puede llamar a la clase de servicio?
  • EditText Alternativas en un Widget? Tiene que haber una forma
  • ¿Cómo eliminar el widget cuando la aplicación se desinstala en Android?
  • Cuadro de selección alrededor de android.support.v7.widget.SwitchCompat
  • Problema con el widget de la aplicación de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.