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 comments:
Post a Comment