2016-05-06 10 views
0

deklarieren Meine App muss Empfänger Broadcast und etwas nur einmal zu tun. Der Anlass könnte die Zeit sein, mein App noch nicht begonnen hat, so erkläre ich den Hörer im Manifest:Wie man die Registrierung aufheben, die im Manifest

<receiver 
    android:name=".OneShotBroadcast" 
    android:permission="com.ytinrete.broadcast.accesspermisson"> 
    <intent-filter> 
     <action android:name="com.ytinrete.broadcast.oneshot"/> 
    </intent-filter> 
</receiver> 

Und hier ist OnReceive:

@Override 
public void onReceive(Context context, Intent intent) { 

    //want to doing my work here just once 
    ...... 

} 

Hier kommt das Problem: ich nicht finden kann, Möglichkeiten, diesen Empfänger zu entfernen, wenn ich die Übertragung zum ersten Mal erhalte.

Ich habe dies versuchen:

context.unregisterReceiver(this); 

aber es die Ausnahme auslösen:

java.lang.RuntimeException: Unable to start receiver com.ytinrete.OneShotBroadcast: 
java.lang.IllegalArgumentException: Receiver not registered: [email protected] 

Derzeit Ich habe nur eine statische boolean als Flag im Empfänger und es funktioniert, aber ich neige um einen Weg zu finden, die Registrierung aufzuheben, so dass ich diese magische Variable in meinem Projekt nicht beibehalten muss.

Gibt es eine andere Möglichkeit, um zu arbeiten? Alle Hinweise werden geschätzt!


Dank Truong Phu Quoc ein Weg, Es gibt wirklich abzumelden: Android - how to unregister a receiver created in the manifest Ich habe es getestet und es funktioniert.

+1

Bitte überprüfen Sie diesen Link: http://stackoverflow.com/questions/6529276/android-how-to-unregister-a-receiver-created-in-the-manifest –

+0

@Truong Phu Quoc Ich habe es gerade getestet und es funktioniert, wie kann ich diese Antwort nicht finden, um hier oft zu suchen. Vielen Dank, bitte schreibe eine Antwort, damit ich sie annehmen kann. – ytinrete

Antwort

0

Ich glaube, Sie Instanz LocalBroadcastManager müssen es deregistrieren

sollten Sie versuchen, Ihre

context.unregisterReceiver(this); 

mit

LocalBroadcastManager.getInstance(context).unregisterReceiver(this); 

es

hilft
0

seine nicht möglich, ich hoffe, zu ersetzen denke ja, aber wenn du Empfänger werden willst, dann registriere dich in deiner Tat itivity only.and die Registrierung in onDestroy-Methode. Wenn Sie es als Manifestdatei deklarieren, wird es jedes Mal aufgerufen, wenn Ihre Sendung aufgerufen wird. können Sie nichts tun, wenn Sie es nicht wollen.

wie

if(not_required){ 
     return ; 
} else{ 
\\do some with action. 
} 

Hoffe, es hilft.