Funkempfangsgerät einfach zu reagieren, um Nachrichten von anderen Anwendungen oder vom System selbst ausgestrahlt.Diese Nachrichten werden irgendwann genannt Ereignissen oder Absichten. Beispielsweise können Anwendungen auch zu initiieren Übertragungen, damit andere Anwendungen wissen, dass einige Daten auf das Gerät heruntergeladen worden und ist für sie zu verwenden, so dass diese ausgestrahlt Empfänger, die diese Kommunikation abzufangen und entsprechende Maßnahmen einzuleiten.
Es gibt folgende zwei wichtige Schritte, um BroadcastReceiver arbeitet für die System ausgestrahlt Absichten -
- Erstellen der Rundfunkempfänger.
- Registrieren von Broadcast-Receiver
Es gibt eine zusätzliche Schritte für den Fall, Sie gehen, um Ihre kundenspezifische Absichten umzusetzen, dann müssen Sie diese Absichten zu erstellen und zu senden.
Erstellen der Rundfunkempfänger
Ein Rundfunkempfänger wird als Unterklasse implementiertBroadcastReceiver Klasse und das Überschreiben der onReceive () -Methode, wo jede Nachricht als empfangen Intent Objektparameter.
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive ( Context context , Intent intent ) { Toast . makeText ( context , "Intent . Erkannt ", Toast. LENGTH_LONG.) Show ();}}
Registrieren von Broadcast-Receiver
Eine Anwendung lauscht spezifischen Broadcast Absichten durch die Registrierung eines Rundfunkempfängers in AndroidManifest.xml Datei.Betrachten wir werden registrieren MyReceiver für System erzeugten Ereignis ACTION_BOOT_COMPLETED die durch das System ausgelöst wird, sobald das Android-System den Bootvorgang abgeschlossen ist.
BROADCAST-RECEIVER
<application android:icon = "@drawable/ic_launcher" android:label = "@string/app_name" android:theme = "@style/AppTheme" > <receiver android:name = "MyReceiver" > <intent-filter> <Action android: name = "android.intent.action.BOOT_COMPLETED"> </ Action> </ intent-filter> </ Empfänger> </ application>
Nun, wenn Ihr Android-Gerät gebootet wird, wird es von BroadcastReceiver abgefangen werden MyReceiver und innen implementierte Logik onReceive ()wird ausgeführt.
Es gibt mehrere System generierten Ereignisse definiert als endgültige statische Felder in der Intent-Klasse. Die folgende Tabelle listet einige wichtige Systemereignisse.
Event Constant | Bezeichnung |
---|---|
android.intent.action.BATTERY_CHANGED | Dauerhaften Broadcast, die den Ladezustand, Niveau, und weitere Informationen über die Batterie. |
android.intent.action.BATTERY_LOW | Zeigt niedrigen Batteriestand auf dem Gerät. |
android.intent.action.BATTERY_OKAY | Zeigt die Batterie ist jetzt in Ordnung, nachdem er gering. |
android.intent.action.BOOT_COMPLETED | Diese wird einmal gesendet werden, nachdem das System gebootet wurde. |
android.intent.action.BUG_REPORT | Zeigen Aktivität für einen Fehler melden. |
android.intent.action.CALL | Führen Sie ein Gespräch mit jemandem durch die Daten festgelegt. |
android.intent.action.CALL_BUTTON | Der Benutzer betätigt die Schaltfläche "Anruf", um die Dialer oder andere geeignete UI für ein Anruf gehen. |
android.intent.action.DATE_CHANGED | Das Datum hat sich geändert. |
android.intent.action.REBOOT | Lassen Sie das Gerät neu starten. |
Rundfunk Benutzerdefinierte Intents
Wenn Sie möchten, dass Ihre Anwendung selbst sollte generieren und senden individuelle Absichten dann müssen Sie erstellen und senden Sie diese Absichten mit Hilfe der sendBroadcast () Methode in Ihrem Aktivitätsklasse.Wenn Sie die Verwendung sendStickyBroadcast (Intent) Methode ist es die Absicht klebrig, also die Absicht, die Sie senden Aufenthalte rund, nachdem die Sendung beendet ist.
public void broadcastIntent ( View view ) { Intent intent = new Intent (); intent . setAction ( "com.tutorialspoint.CUSTOM_INTENT" ); sendBroadcast ( intent ); }
Diese Absicht com.tutorialspoint.CUSTOM_INTENT kann auch in ähnlicher Weise registriert werden, wie wir System erzeugt Vorsatz Für registriert.
<application android:icon = "@drawable/ic_launcher" android:label = "@string/app_name" android:theme = "@style/AppTheme" > <receiver android:name = "MyReceiver" > <intent-filter> <Action android: name = "com.tutorialspoint.CUSTOM_INTENT"> </ Action> </ intent-filter> </ Empfänger> </ application>
Beispiel
Dieses Beispiel wird Ihnen erklären, wie das Erstellen BroadcastReceiverindividuelle Absicht, abfangen. Sobald Sie mit benutzerdefinierten Absicht vertraut sind, dann sind Sie bei Ihrer Bewerbung auf System erzeugten Absichten abfangen programmieren. Lassen Sie uns also befolgen Sie die folgenden Schritte aus, um die Android-Anwendung wir erstellt ändern Hallo Welt Beispiel Kapitel -
Schritt | Bezeichnung |
---|---|
1 | Sie werden Android-Studio verwenden, um ein Android-Anwendung erstellen und benennen es als meine Anwendung unter einem Paketcom.example.My Anwendung wie in der erläutert Hallo Welt BeispielKapitel. |
2 | Ändern Haupttätigkeit Datei MainActivity.java hinzufügenbroadcastIntent () Methode. |
3 | Erstellen Sie eine neue Datei namens java MyReceiver.java unter dem Paket com.example.My Anwendung, eine BroadcastReceiver definieren. |
4 | Eine Anwendung kann eine oder mehrere benutzerdefinierte und System Absichten ohne Einschränkungen zu behandeln. Jeder Gedankenstrich die Sie abfangen wollen, müssen in Ihrem eingetragen werdenAndroidManifest.xml Datei mit <Empfänger ... /> Tag |
5 | Ändern Sie den Standardinhalt der res / layout / activity_main.xml-Datei, um eine Schaltfläche auf Vorsatz ausgestrahlt sind. |
6 | Keine Notwendigkeit, ändern Sie den String-Datei, Android Studio kümmern string.xml Datei. |
7 | Führen Sie die Anwendung auf Android-Emulator zu starten, und überprüfen Sie das Ergebnis der Änderungen in der Anwendung durchgeführt. |
Im Anschluss ist der Gehalt des modifizierten Haupttätigkeit Datei src / com.example.My Anwendung / MainActivity.java. Diese Datei kann jedes der grundlegenden Lebenszyklus Methoden umfassen. Wir haben gegebenbroadcastIntent () Methode, um eine benutzerdefinierte Absicht ausgestrahlt.
Paket com. Beispiel. Meine Anwendung; import android . os . Bundle ; import android . app . Activity ; import android . view . Menu ; import android . content . Intent ; import android . view . View ; öffentliche Klasse MainActivity erstreckt Aktivität { @Override public void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . activity_main ); } @Override public boolean onCreateOptionsMenu ( Menu menu ) { getMenuInflater (). inflate ( R . menu . activity_main , menu ); return true ; } // Eine benutzerdefinierte ausgestrahlt intent. public void broadcastIntent ( View view ){ Intent intent = new Intent (); intent . setAction ( "com.tutorialspoint.CUSTOM_INTENT" ); sendBroadcast ( intent ); } }
Im Anschluss wird der Inhalt des src / com.example.My Anwendung /MyReceiver.java:
Paket com. Beispiel. Meine Anwendung; import android . content . BroadcastReceiver ; import android . content . Context ; import android . content . Intent ; import android . widget . Toast ; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive ( Context context , Intent intent ) { Toast . makeText ( context , "Intent . Erkannt ", Toast. LENGTH_LONG.) Show ();}}
Im Anschluss wird der modifizierte Inhalt der AndroidManifest.xml Datei. Hier haben wir hinzugefügt <service ... /> Tag, um unseren Service gehören:
<manifest xmlns: android = "http://schemas.android.com/apk/res/android" Paket = "com.example.My Application" Android: Versioncode = "1" Android: versionname = "1.0"> <verwendet-sdk Android: minSdkVersion = "8" Android: targetSdkVersion = "22" /> <application android:icon = "@drawable/ic_launcher" android:label = "@string/app_name" android:theme = "@style/AppTheme" > <Aktivität android: name = ".MainActivity" android: label = "@ String / title_activity_main"> <intent-filter> <action android:name = "android.intent.action.MAIN" /> <category android:name = "android.intent.category.LAUNCHER" /> </intent-filter> </ Tätigkeit> <Empfänger android: name = "MyReceiver"> <intent-filter> <Action android: name = "com.tutorialspoint.CUSTOM_INTENT"> </ Action> </ intent-filter> </ Empfänger> </ application> </ manifest>
Im Anschluss wird der Inhalt sein res / layout / activity_main.xml Datei eine Schaltfläche enthalten, um unsere eigene Absicht ausgestrahlt -
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" android:paddingLeft = "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" android:paddingBottom = "@dimen/activity_vertical_margin" tools:context = ".MainActivity" > <TextView android:id = "@+id/textView1" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Example von Broadcast" android:layout_alignParentTop = "true" android:layout_centerHorizontal = "true" android:textSize = "30dp" /> <TextView android:id = "@+id/textView2" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Tutorials Punkt " android:textColor = "#ff87ff09" android:textSize = "30dp" android:layout_above = "@+id/imageButton" android:layout_centerHorizontal = "true" android:layout_marginBottom = "40dp" /> <ImageButton android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:id = "@+id/imageButton" android:src = "@drawable/abc" android:layout_centerVertical = "true" android:layout_centerHorizontal = "true" /> <Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:id = "@+id/button2" android:text = "Broadcast Intent" android:onClick = "broadcastIntent" android:layout_below = "@+id/imageButton" android:layout_centerHorizontal = "true" /> </ RelativeLayout>
Im Anschluss wird der Inhalt sein res / Werte / strings.xml zwei neue Konstanten definieren -
<resources> <string name = "menu_settings"> Einstellungen </ string> <string name = "title_activity_main"> My Application </ string> </ resources>
Lassen Sie uns versuchen, unsere modifizierten laufen Hallo Welt! Anwendung, die wir gerade geändert. Ich nehme an, Sie geschaffen hatte AVD dabei Umfeld Set-up. Um die App vom Android-Studio, öffnen Sie eine der Aktivität Dateien Ihres Projekt auszuführen, und klicken Sie auf Ausführen-Symbol in der Werkzeugleiste. Android Studio installiert die App auf Ihrem AVD und startet es und wenn alles in Ordnung ist mit der Einrichtung und Anwendung, wird es folgende Emulator-Fenster anzuzeigen -
Nun, unsere individuelle Absicht zu senden, lassen Sie uns auf klickenBroadcast-Intent-Taste, wird dies unsere eigene Absicht ausgestrahlt"com.tutorialspoint.CUSTOM_INTENT", die durch unsere registrierten BroadcastReceiver dh MyReceiver abgefangen werden und wie pro unsere implementierte Logik ein Toast auf dem Boden erscheinen der Simulator wie folgt -
Sie können versuchen, Durchführung der anderen BroadcastReceiver zu System abfangen erzeugten Absichten wie Systemstart, das Datum geändert, Batterie usw.
0 التعليقات:
Kommentar veröffentlichen