AppWidget обновляет Uri для RemoteViews

Я создал Appwidget, который отображает файл изображения (test.png), который предоставляется его RemoteViews через Uri. В onUpdate я запускаю сервис, который изменяет содержимое файла. Я также установил onClickListener для изображения, которое будет вызывать onUpdate.

-Если я создаю экземпляр AppWidget, он отображает самую последнюю измененную версию файла Uri.

-Если я щелкаю виджет, мой сервис вносит соответствующие изменения в файл (что я могу проверить с помощью проводника), но он не обновляет изображение, отображаемое в AppWidget.

- (и самое главное) Если я удаляю AppWidget и создаю новый, он отображает текущую / правильную версию файла изображения.

Я знаю, что мой сервис может занять слишком много времени, чтобы вступить в силу при первом проходе, но он должен отображать самое последнее изображение при следующем вызове onClick / onUpdate. В нынешнем виде AppWidget отображает только версию файла изображения, которая существует при первом вызове onUpdate.

Вопрос:

Как правильно обновить содержимое RemoteView в Appwidget, я что-то упустил в своем подходе здесь?

Спасибо за ваше время!

Обновить:

Я попытался вызвать метод 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's 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);
    }
 }
} 

Ответы на вопрос(3)

Ваш ответ на вопрос