2016-02-23 10 views
11

Bir uygulama widget'ım var ve tıklama olayı, sağlayıcımda onUpdate() numaralı telefondan alınabilir.
Ancak, ana başlatıcıyı zorlamaya çalıştığımda, tıklama olayı kayboluyor.
Tüm onEnabled(), onReceived() ... vb. Için kesme noktaları koydum: bağlantı kaybolacak gibi görünüyor.Android AppWidget'ın düğmesinin tıklatılması, ana başlatıcıdan sonra durdurulmadı güç durdurma

Sonuç olarak düğme olayına nasıl yeniden "bağlanabilirim?"

WidgetProvider AppWidgetProvider uzanır:

@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 Service uzanır:

@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

Bir hizmet başlatma OnUpdate! Eğer –

+1

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

+0

hizmetinde çalışmalar yapabiliyorsunuz widget'ım liste görünümü içeriyor, bu yüzden zaten RemoteViewsService'yi genişleten bir sınıf var. Yani başka bir hizmete yazmam gerek? Düzenlenmiş kodumdan – jjLin

cevap

0

Eğer onStart fonksiyonunda doğru içerik kullandığınızdan emin olun. Kodunuzun onStart bölümünde bulunan getApplicationContext'a bakın, yanlış içerik tipini iletmek hatalara neden olabilir. Daha fazla bilgi için bir link: Context.

İlgili konular