2016-02-23 22 views
11

Mam widżet aplikacji, a zdarzenie kliknięcia można odebrać w usłudze onUpdate() u mojego dostawcy.
Jednak, gdy próbuję wymusić zamknięcie programu startowego, zdarzenie kliknięcia zostanie utracone.
Umieściłem nawet punkty przerwania we wszystkich onEnabled(), onReceived() ... itd: połączenie wydaje się być utracone.Zdarzenie kliknięcia przycisku AppWidget w systemie Android nie zostało odebrane po zatrzymaniu startera domowego.

W rezultacie w jaki sposób mogę "ponownie podłączyć" wydarzenie przycisku?

WidgetProvider rozciąga 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 rozciąga 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

Uruchom usługę OnUpdate! możesz wykonywać swoje prace Usługa –

+1

http://stackoverflow.com/questions/26108355/how-to-start-an-activity-by-the-click-on-an-image-in-widget/26288400#26288400 –

+0

mój widget zawiera listview, więc ma już klasę, która rozszerza RemoteViewsService. więc muszę napisać kolejny na usługi? – jjLin

Odpowiedz

0

Upewnij się, że używasz właściwego kontekstu, w swojej funkcji onStart. Sprawdź kod getApplicationContext w części kodu, podając niewłaściwy kontekst może spowodować błędy. Oto link, aby uzyskać więcej informacji: Context.

Powiązane problemy