2016-05-26 2 views
1

J'essaie d'intercepter le rappel dans mon fournisseur de widget à partir de tous les services avec diffusion. Mais cela ne fonctionne pas.Android AppWidgetProvider écoute le rappel du service

Ceci est mon fournisseur widget de

public class MyProvider extends AppWidgetProvider { 

    final String LOG_TAG = "States"; 
    public final static String BROADCAST_ACTION = "action"; 
    BroadcastReceiver br; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

     br = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 

       Log.d(LOG_TAG, "receive intent"); // No fire here!! 

      } 
     }; 
     IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION); 
     context.registerReceiver(br, intFilt); 
    } 
} 

Ceci est mon remoteViewsFactory d'où je veux callbacks capture.

public class MyFactory implements RemoteViewsFactory { 

    Context context; 
    int widgetID; 
    final String LIST_READY = "list_ready"; 
    public final static String BROADCAST_ACTION = "action"; 

    @Override 
    public void onDataSetChanged() { 
     Intent intent = new Intent(BROADCAST_ACTION); 
     intent.putExtra(LIST_READY, 1); 
     context.sendBroadcast(intent); 
    } 
} 

Peut-être que c'est faux? Comment organiser la diffusion entre le widget et l'usine mieux?

Répondre

0

Ceci est mon fournisseur widget

Cela devrait être s'écraser, comme AppWidgetProvider est un BroadcastReceiver, et vous ne pouvez pas appeler registerReceiver() sur le Context fourni à onReceive() d'un BroadcastReceiver. Quoiqu'il en soit, une fois retourné le onUpdate(), votre instance AppWidgetProvider a disparu avec son récepteur enregistré. Si votre AppWidgetProvider vit pendant plus d'une milliseconde, vous le faites mal.

Je suis en train de rattraper le rappel dans mon fournisseur widget de tout service avec la diffusion

Je ne suis pas tout à fait certain de ce que vous essayez d'accomplir. Gardez à l'esprit qu'un service, ou toute autre chose, peut mettre à jour un widget d'application directement, via AppWidgetManager. Si vous avez un code commun pour mettre à jour le contenu du widget App, placez-le dans une méthode static ou une classe utilitaire, et utilisez le AppWidgetProvider et le service (ou tout autre élément nécessaire pour mettre à jour le widget app).