OnUpdate () does not call the widget service

I am developing a widget for my application. The name of the widget is a story, when a user looks at some URL, I will store it in a local db that displays its view.

when I open the widget, it retrieves all the data from the local database and shows it as a list of widgets.

1) when I open the widget, first onUpdate WidgetProvider method is called

2), then onUpdate () will call the WidgetService

3), then the service will call Widget Factory to update the list view using a locally stored db.

In the factory widget, it will get db values ​​and update the lisviews in the widgets.

The above process occurs when you configure the widget.

First grade:

        public class WidgetProviderFavorite extends AppWidgetProvider {

        @SuppressWarnings("deprecation")
        @Override
          public void onUpdate(Context ctxt, AppWidgetManager appWidgetManager,int[] appWidgetIds) {            
            for (int i=0; i<appWidgetIds.length; i++) {
              Intent svcIntent=new Intent(ctxt, WidgetServiceFavorite.class);
              svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
              svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));  
              RemoteViews widget=new RemoteViews(ctxt.getPackageName(),R.layout.widget_favorite);
              widget.setRemoteAdapter(appWidgetIds[i], R.id.listFavoriteLogin,svcIntent);                                  
              Intent clickIntent=new Intent(ctxt, WidgetActivityFavorite.class);                                 
              PendingIntent clickPI=PendingIntent.getActivity(ctxt, 0,clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);

              widget.setPendingIntentTemplate(R.id.listFavoriteLogin, clickPI);                                              
              appWidgetManager.updateAppWidget(appWidgetIds[i], widget);

            }

            super.onUpdate(ctxt, appWidgetManager, appWidgetIds);
          } 

:

        public class WidgetServiceFavorite extends RemoteViewsService {
          @Override
          public RemoteViewsFactory onGetViewFactory(Intent intent) {

            return(new WidgetFactoryFavorite(this.getApplicationContext(),intent));         
          }
        }

:, .

construtor getViewAt() ( ) .

        public class WidgetFactoryFavorite extends Activity implements RemoteViewsService.RemoteViewsFactory {

          public WidgetFactoryFavorite(Context ctxt, Intent intent) {
              int array_Index=0;
              int array_Length=0;
              WidgetDatabase db1=new WidgetDatabase(ctxt);
              List<WidgetDatabaseModel> facorite = db1.getFavorite();
              array_Length=facorite.size(); 

              mNames=new String[array_Length];                                     
              mSummary=new String[array_Length];

              for (WidgetDatabaseModel cn : facorite) {                     
                  mNames[array_Index] =cn.getNAME(); 
                  mSummary[array_Index]= cn.getSUMMARY();
                  array_Index++;
              } 

              this.mCtxt=ctxt;
              intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                                              AppWidgetManager.INVALID_APPWIDGET_ID);

          }
            @Override
          public void onCreate() {
            // no-op
          }

          @Override
          public void onDestroy() {
            // no-op
          }

          @Override
          public int getCount() {
            return(mNames.length);
          }

          @Override
          public RemoteViews getViewAt(int position) {

              RemoteViews row=new RemoteViews(mCtxt.getPackageName(),
                                             R.layout.widget_rowfavorite);

              row.setTextViewText(android.R.id.text1, mNames[position]);

              Intent i=new Intent();
              Bundle extras=new Bundle(); 
              extras.putString(WidgetProviderFavorite.sExtra_Guid, mGuid[position]);
              extras.putString(WidgetProviderFavorite.sExtra_Url, mUrl[position]);
              i.putExtras(extras);
              row.setOnClickFillInIntent(android.R.id.text1, i);

              return(row);
          }

          @Override
          public RemoteViews getLoadingView() {
            return(null);
          }

          @Override
          public int getViewTypeCount() {
            return(1);
          }

          @Override
          public long getItemId(int position) {
            return(position);
          }

          @Override
          public boolean hasStableIds() {
            return(true);
          }

          @Override
          public void onDataSetChanged() {
          }
        }

:

, URL- . , URL-.

        int[] ids = AppWidgetManager.getInstance(mActivity).getAppWidgetIds(new ComponentName(mActivity, WidgetProviderFavorite.class));
        WidgetProviderFavorite myWidget = new WidgetProviderFavorite();
        myWidget.onUpdate(mActivity, AppWidgetManager.getInstance(mActivity),ids);

onUpdate(). onUpdate , factory lisview . , , , db.

?

+4
1

:

notifyAppWidgetViewDataChanged() onUpdateMethod().

   appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.listView);

OnUpdate():

    public class WidgetProviderFavorite extends AppWidgetProvider {

    @SuppressWarnings("deprecation")
    @Override
      public void onUpdate(Context ctxt, AppWidgetManager appWidgetManager,int[] appWidgetIds) {            
        for (int i=0; i<appWidgetIds.length; i++) {
          Intent svcIntent=new Intent(ctxt, WidgetServiceFavorite.class);
          svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
          svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));  
          RemoteViews widget=new RemoteViews(ctxt.getPackageName(),R.layout.widget_favorite);
          widget.setRemoteAdapter(appWidgetIds[i], R.id.listFavoriteLogin,svcIntent);                                  
          Intent clickIntent=new Intent(ctxt, WidgetActivityFavorite.class);                                 
          PendingIntent clickPI=PendingIntent.getActivity(ctxt, 0,clickIntent,PendingIntent.FLAG_UPDATE_CURRENT);

          widget.setPendingIntentTemplate(R.id.listFavoriteLogin, clickPI); 

          appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.listView);                

          appWidgetManager.updateAppWidget(appWidgetIds[i], widget);

        }

        super.onUpdate(ctxt, appWidgetManager, appWidgetIds);
      } 
+2

Source: https://habr.com/ru/post/1669231/


All Articles