Intereting Posts
Ошибка при попытке запустить новый проект в Android Studio 2.2.1 Анимировать элементы списка в ListView Перезагрузка страницы веб-браузера android после захвата изображения и загрузка в android 5+ Не удалось найти метод onClick (View) в активности Как сделать пространство между столбцами на барграфе с использованием Achartengine, если каждый бар отличается цветом, связанным с разными значениями Сохранять статические данные в Android – пользовательский ресурс? Как использовать конвертер Gson в RetroFit? Удалить системный кеш на android 6.0 Прокрутка до / установка позиции настроек пользовательского списка. Gradle Android Project с модулем Java 8 Как я могу поделиться экраном на другой базе устройств с прямым соединением WiFi Нажатие кнопки справа при открытии выдвижного ящика Android: рекомендации AsyncTask: частный класс или открытый класс? Использование действий в библиотечных проектах Пользовательский прозрачный Android ActionBar

Виджет приложения setImageViewUri не обновляет изображение

У меня есть виджет приложения, который содержит только одно изображение. Я перерисовываю это изображение и сохраняю его как png в частной памяти приложений, а затем устанавливаю образ RemoteViews с помощью uri (widget.setImageViewUri (R.id.widget_icon, uri)) вместо отправки его растрового изображения, потому что очень редко Ситуации, которые я получаю !!! НЕИСПРАВНОСТЬ СДЕЛКА СДЕЛКИ !!!

Проблема заключается в том, что по мере изменения изображения со временем изображение виджета не изменяется. Я проверил сохраненный png с помощью root explorer и обновил его правильно. Но правильное изображение не отображается. Каждый виджет показывает изображение с момента его добавления на главный экран. Если я использую setImageViewBitmap (…), он работает правильно, за исключением редкой неудачной транзакции связующего.

Я обновляю виджет из службы с помощью метода ниже. Он не работает на 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, 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: я также попробовал пользовательский ContentProvider и установил urid «content: // …», но с тем же результатом. Виджет показывает изображение с момента его добавления на главный экран и не обновляется со временем.

Logcat не показывает никаких ошибок.

Solutions Collecting From Web of "Виджет приложения setImageViewUri не обновляет изображение"

Если Uri останется неизменным, похоже, Android не будет обновлять изображение. Я нашел немного взлома, чтобы обойти это, хотя. Просто вызовите widget.setImageViewUri(R.id.widget_icon, Uri.parse("")); Перед widget.setImageViewUri(R.id.widget_icon, uri); ,

Он вызывает setImageViewUri() дважды, но, похоже, работает нормально. Мне бы хотелось услышать лучший способ исправить это, поскольку я сам испытываю эту проблему.

Ну, похоже, что setImageViewUri кэширует изображения и не обновляет их, если они имеют одинаковое имя.

Не самое элегантное решение, но оно работает, каждый второй раз он будет использовать другое имя файла.

 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()));