У меня есть виджет приложения, который содержит только одно изображение.я перерисовываю это изображение и сохраняю его как 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);
}
}
РЕДАКТИРОВАТЬ: Я также попытался пользовательский ContentProvider и настройки "content: // ..." uri, но с тем же результатом.виджет показывает изображение с момента его добавления на домашний экран и не обновляется с течением времени.
logcat не показывает ошибок.