2016-05-26 14 views
1

Я пытаюсь поймать обратный вызов в моем провайдере виджетов из любых служб с трансляцией. Но это не сработает.Android AppWidgetProvider прослушивает обратный вызов из службы

Это мой виджет провайдер

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); 
    } 
} 

Это мой remoteViewsFactory, где я хочу ловить обратные вызовы.

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); 
    } 
} 

Возможно, это неправильно? Как лучше организовать трансляцию между виджетами и фабрикой?

ответ

0

Это мой провайдер виджет

Это должно быть сбой, как AppWidgetProvider является BroadcastReceiver, и вы не можете позвонить registerReceiver() на Context, подаваемой onReceive() из в BroadcastReceiver.

Независимо от того, как только onUpdate() возвращается, ваш AppWidgetProvider экземпляр ушел вместе со своим зарегистрированным приемником. Если ваш AppWidgetProvider проживает более миллисекунды, вы делаете это неправильно.

Я пытаюсь поймать обратный вызов в моем провайдере виджетов от каких-либо услуг с вещанием

Я не совсем уверен, что вы пытаетесь достичь. Имейте в виду, что служба или что-либо еще может напрямую обновлять виджет приложения, используя AppWidgetManager. Если у вас есть общий код для обновления содержимого виджета приложения, поместите его в класс или класс утилиты static и используйте его как из AppWidgetProvider, так и из службы (или что еще нужно обновить виджет приложения).