2012-03-23 13 views
0

Ich habe auf Service, der mit einer Aktivität (MyActivity) über einen BradcastReceiver kommunizieren muss. Diese BroadcastReceiver ist intosame Aktivität erklären so:Android: Aktivität und Service-Kommunikation

private class MessaggiReceiver extends BroadcastReceiver { 
     public static final String ACTION_RELOAD = "it.android.dev.thecode.ACTION_RELOAD"; 
     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      if(intent.getAction().equals(ACTION_RELOAD)){ 
       leggi_act; //Method of MyActivity 
      } 
     } 

    } 

aber wie in Manifest der brodcast enthalten innerhalb der MyActivity erklären müssen? Ich habe diesen Code mit it.android.dev.thecode.MyActivity.MessaggiReceiver

<receiver android:name="it.android.dev.thecode.MyActivity.MessaggiReceiver"> 
      <intent-filter> 
       <action android:name="it.android.dev.thecode.ACTION_RELOAD"></action> 
      </intent-filter> 
</receiver> 

aber falsch ist, dann habe ich diesen Code mit it.android.dev.thecode.myactivity $ MessaggiReceiver

<receiver android:name="it.android.dev.thecode.MyActivity$MessaggiReceiver"> 
       <intent-filter> 
        <action android:name="it.android.dev.thecode.ACTION_RELOAD"></action> 
       </intent-filter> 
    </receiver> 

Danke

+0

Wenn Sie es im Manifest deklarieren, muss die Klasse, die es implementiert, sichtbar sein, d. H. Nicht "privat". Legen Sie es in eine separate Datei und machen Sie die Klasse "public". – zapl

Antwort

1

Sie müssen keinen Broadcast-Empfänger in Ihrem Manifest registrieren, sondern registrieren Sie es durch Code in Ihrer Aktivität onResume. Vergessen Sie nicht, sich in onPause abzumelden, um Lecks zu vermeiden.

@Override 
public void onResume() { 
    registerReceiver(mMessageReceiver, 
     new IntentFilter("it.android.dev.thecode.ACTION_RELOAD")); 
} 

@Override 
public void onPause() { 
    unregisterReceiver(mMessageReceiver); 
} 

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d("receiver", "Got broadcast: " + intent.getAction()); 
    } 
}; 
+0

Meine Broadcast muss immer funktionieren, als ich nicht unregisterReceiver-Code in onPause einfügen? – MimmoG

+0

Wenn Sie Ihre Aktivität nicht sichtbar haben, sollte sie natürlich auch keine Übertragungen hören, so sollte es funktionieren. Wenn Sie die Übertragung in onPause nicht abmelden, wird das Framework Warnungen in logcat auslösen und seine Überwachung abbrechen. So ist es besser, im Voraus mit dem Aktivitätslebenszyklus freundlich zu sein, indem man sich in onPause – waqaslam

+0

abmeldet. Ok danke dir :) – MimmoG