Я создал Appwidget, который отображает файл изображения (test.png), который предоставляется ему RemoteViews через Uri. В onUpdate я запускаю службу, которая изменяет содержимое файла. Я также установил onClickListener для изображения, которое будет вызывать onUpdate.
-Если я создаю экземпляр AppWidget, он отображает последнюю измененную версию файла Uri.
-Если я нажимаю на виджет, моя служба делает соответствующие изменения в файле (который я могу проверить с помощью проводника файлов), но он не обновляет изображение, отображаемое в AppWidget.
- (и самое главное) Если я удалю AppWidget и создаю новый, он отобразит текущую/правильную версию файла изображения.
Я знаю, что мой сервис может занять слишком много времени, чтобы вступить в силу с первого прохода, но он должен отображать самое последнее изображение на следующем onClick/call onUpdate. В настоящее время AppWidget отображает только версию файла изображения, которая существует при первом вызове onUpdate.
Вопрос:
Каков правильный способ обновления содержимого RemoteView в Appwidget, я пропустил что-то в своем подходе здесь?
спасибо за ваше время!
Update:
Я попытался вызвать метод AppWidgetManager.notifyAppWidgetViewDataChanged() из AppWidgetProvider.onReceive() и по-прежнему не изменять содержимое RemoteViews после onUpdate().
public class CCWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
{
// Get all ids
ComponentName thisWidget = new ComponentName(context,CCWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds)
{
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout04);
/*
* it here that I run a service that changes the content of the file /test/test.png
*/
RelativeLayout RL_widget = new RelativeLayout(context);
LayoutInflater inflater = (LayoutInflater)context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
RL_widget = (RelativeLayout)inflater.inflate(R.layout.widget_main, null);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/test/test.png");
remoteViews.setImageViewUri(R.id.IV_widget_image,uri);
Intent intent = new Intent(context, CCWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
//PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.IV_widget_image, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}