Saturday, March 12, 2016

Android AppWidget's button click event not received after home launcher force stop

Leave a Comment

I have an app widget and the click event can be received in onUpdate() in my provider.
However, when I try to force close the home launcher, the click event is lost.
I even put breakpoints in all onEnabled(), onReceived()...etc: the connection seems to be lost.

As a result, how can I "re-connect" the button event?

WidgetProvider extends AppWidgetProvider:

@Override     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {         Log.d(TAG, "onUpdate()");         Log.d(TAG, "isLoading: " + CONSTANT.isLoading);         // update each of the widgets with the remote adapter from updateService         // Get all ids         ComponentName thisWidget = new ComponentName(context, ScoreWidgetProvider.class);         int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);          // Build the intent to call the service         Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class);         intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);          // Update the widgets via the service         context.startService(intent);  //      super.onUpdate(context, appWidgetManager, appWidgetIds);     }   

UpdateWidgetService extends Service:

@Override         public void onStart(Intent intent, int startId) {              Log.i(TAG, "Called");              AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());              int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);              for (int i = 0; i < appWidgetIds.length; ++i) {                 // Here we setup the intent which points to the StackViewService which will                 // provide the views for this collection.                 Intent remoteViewsIntent = new Intent(this.getApplicationContext(), ScoreWidgetRemoteViewsService.class);                 remoteViewsIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);                 // When intents are compared, the extras are ignored, so we need to embed the extras                 // into the data so that the extras will not be ignored.                 remoteViewsIntent.setData(Uri.parse(remoteViewsIntent.toUri(Intent.URI_INTENT_SCHEME)));                 RemoteViews rv = new RemoteViews(this.getApplicationContext().getPackageName(), R.layout.widget_layout);                 rv.setRemoteAdapter(appWidgetIds[i], R.id.score_list, remoteViewsIntent);                  // Set the empty view to be displayed if the collection is empty.  It must be a sibling                 // view of the collection view.                 rv.setEmptyView(R.id.score_list, R.id.empty_view);                  // Bind the click intent for the refresh button on the widget                 final Intent refreshIntent = new Intent(this.getApplicationContext(), ScoreWidgetProvider.class);                 refreshIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                 refreshIntent.setAction(ScoreWidgetProvider.REFRESH_ACTION);                 final PendingIntent refreshPendingIntent = PendingIntent                         .getBroadcast(this.getApplicationContext(), 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);                 rv.setOnClickPendingIntent(R.id.btn_refresh, refreshPendingIntent);                  appWidgetManager.updateAppWidget(appWidgetIds[i], rv);             }      //        stopSelf();              super.onStart(intent, startId);         } 

0 Answers

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment