11

Ich habe Alarm für meine Anwendung geplant.Android - Wie kann ein Broadcast-Empfänger ausgelöst werden, um seine onReceive() -Methode aufzurufen?

Ich habe Rundfunk Empfänger implementiert, um ausgelöst werden, sobald die Alarmzeit erreicht.

So rufen Sie den Broadcast-Empfänger manuell auf, um den Code innerhalb der onReceive-Methode auszuführen, ohne den Code zweimal zu replizieren.

Ich dachte an den Code im Dienstprogramm Singleton aufrufen und rufen Sie diese Methode, indem Sie util Klasseninstanz von überall.

Aber ist das eine andere Möglichkeit, diese onReceive-Methode direkt aufzurufen oder die Absicht anderweitig zu senden.

android: exportierte = "false" // Zusätzliche Parameter des Empfängers, wenn Definition in Manifest-Datei.

Eine andere Frage ist, was dieser exportierte Parameter bedeutet. Bitte hilf mir das zu verstehen.

Antwort

20

1. Die Art und Weise ein BroadcastReceiver manuell zu starten ist durch

Intent intent = new Intent("com.myapp.mycustomaction"); 
sendBroadcast(intent); 

Aufruf wo "com.myapp.mycustomaction" die Aktion für Ihre BroadcastReceiver im Manifest angegeben ist. Dies kann von einem Activity oder einem Service aufgerufen werden.

2. Es ist bekannt, dass Android Anwendungen ermöglicht, Komponenten anderer Anwendungen zu verwenden. Auf diese Weise können Activity s, Service s, BroadcastReceiver s und ContentProvider s meiner Anwendung von externen Anwendungen gestartet werden, vorausgesetzt, dass das Attribut android:exported = true im Manifest festgelegt ist. Wenn es auf android:exported = false festgelegt ist, kann diese Komponente nicht von einer externen Anwendung gestartet werden. Siehe here.

+0

kann u bitte den gesamten Code schreiben ... –

+0

können Sie die Intent-Filterdefinition hinzufügen? OP darf es bisher explizit –

+0

genannt haben Dank Zygotelnit. Ja, ich konnte es nennen. –

2

So rufen Sie Broadcast-Empfänger manuell auf, um den Code innerhalb von onReceive-Methode auszuführen, ohne den Code zweimal zu replizieren.

Feuer BroadcastReceiver mit sendBroadcast gleiche Aktion, die in AndroidManifest.xml hinzugefügt:

Intent intent=new Intent(CUSTOM_ACTION_STRING); 
// Add data in Intent using intent.putExtra if any required to pass 
sendBroadcast(intent); 

was das Android ist: exportierte Parameter bedeutet

Wie in android:exported doc: Unabhängig davon, ob die Broadcast-Empfänger kann Nachrichten von Quellen außerhalb seiner Anwendung empfangen - "wahr", wenn es möglich ist, und "falsch" i f nicht

bedeutet, wenn:

android: exportiert = true: andere Anwendung auch in der Lage diese Rundfunkempfänger zu feuern Aktion

android mit: exportiert = false: andere Anwendung nicht in der Lage feuern Sie diesen Rundfunkempfänger mit der Aktion

+0

Und vom Befehl 'adb Shell ist Broadcast-a ACTION_STRING'. –

6

Sie müssen die action erwähnen, die von Android OS gefiltert werden muss, um Sie zu benachrichtigen. dh: Rundfunkempfänger des OnReceive Methode aufzurufen innerhalb Manifest-Datei,

<receiver 
android:name="com.example.MyReceiver" 
android:enabled="true" > 
<intent-filter> 
    <action android:name="com.example.alarm.notifier" />//this should be unique string as action 
</intent-filter> 

und

wann immer Sie wollen,

Intent intent = new Intent(); 
intent.setAction("com.example.alarm.notifier"); 
sendBroadcast(intent);