0

ich LocalBroadcastManager bin mit Broadcast an meine activtiy und Dienstleistungen machen Anwendungskontext verwendet wird, wie folgt aus:LocalBroadcastManager nicht empfangen Sendungen in einer Aktivität

public class CommonForApp extends Application{ 
    public void broadcastUpdateUICommand(String[] updateFlags, 
       String[] flagValues) { 
      Intent intent = new Intent(UPDATE_UI_BROADCAST); 
      for (int i = 0; i < updateFlags.length; i++) { 
       intent.putExtra(updateFlags[i], flagValues[i]); 
      } 

      mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext); 
      mLocalBroadcastManager.sendBroadcast(intent); 

     }} 

nun einen Zuhörer in meinem Service, ich rufe broadcastUpdateUICommand (), wie folgt aus:

public class mService extends Service { 
    public BuildNowPLaylistListListener buildCursorListener = new BuildNowPLaylistListListener() { 

      @Override 
      public void onServiceListReady() { 
    mApp.broadcastUpdateUICommand(
         new String[] { CommonForApp.INIT_DRAWER}, 
         new String[] {""}); 

      }}} 

Und ich die Sendung in meiner Tätigkeit erhält, wie folgt aus:

public class mActivity extends Activity{ 
    BroadcastReceiver mReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
      mtoast.showtext("in onreceive"); //toast to check 

       if (intent.hasExtra(CommonForApp.INIT_DRAWER)) 
        initialiseDrawer(); 

    }}; 


} 

mApp ist Instanz der Anwendung. CommonForApp ist meine Anwendungsklasse.

Aber in meiner Aktivität empfange ich keine Broadcast (der Broadcast-Manager wird mit Anwendungskontext initialisiert).

Kann mir jemand vorschlagen, warum ich in meiner Tätigkeit keine Sendung bekomme? ..

. Vielen Dank im Voraus!

+0

Grund für Downvote ... Plz –

+0

Ist die 'Activity' laufen, wenn Sie die Sendung schicken? Sind Sie sicher, dass Sie den Receiver mit dem richtigen 'IntentFilter' in der' Activity' registrieren? Warum sendest du nicht einfach direkt aus dem 'Service'? –

+0

Wo ist die Registrierung für Nachrichten in Aktivität? –

Antwort

3

in Tätigkeit:

protected BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, final Intent intent) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if(intent.hasExtra("type")){ 
        // Do some action 
       } 
      } 
     }); 

    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 
    super.onCreate(savedInstanceState, persistentState); 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
      new IntentFilter("data-loaded")); 
} 

protected void onDestroy() { 
    super.onDestroy(); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
} 

Sie dann Broadcast senden:

public static void sendBroadcastMessageDataLoaded(Context context, String dataType){ 
    Intent intent = new Intent("data-loaded"); 
    intent.putExtra("type", dataType); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 
} 
+0

BRoadcastreceiver funktioniert nicht nach einiger Zeit ... warum so? –

+0

Aktivität kann bei wenig Speicher beendet werden) –

+0

@developer I hatte einen Broadcast-Empfänger in meinem Dienst und bemerkte, dass auf einigen Telefonen Android den Dienst nach einiger Zeit tötet - dann hörte der Broadcast-Empfänger auf zu arbeiten:/ –