Latest web development tutorials

Android Rundfunkempfänger (Broadcast-Receiver)

Rundfunkempfänger in Reaktion auf die Broadcast-Nachricht an andere Anwendungen oder Systemen. Diese Nachrichten werden manchmal Ereignisse oder Absichten genannt. Beispielsweise kann eine Anwendung eine Broadcast initiieren anderen Anwendungen zu erlauben, einen Teil der Daten zu führen, ist auf das Gerät geladen worden sind, und sie können verwendet werden. Ein solcher Rundfunkempfänger kann geeignete Maßnahmen zu definieren, diese Kommunikation abzufangen.

Es gibt zwei wichtige Schritte, um die Absicht des Rundfunksystems mit einem Rundfunkempfänger zu machen, zu arbeiten.

  • Erstellen Rundfunkempfänger
  • Registrierte Rundfunkempfänger

Es ist ein weiterer Schritt die Absicht der Gewohnheit zu erreichen, müssen Sie erstellen und diese Absichten übertragen.


Erstellen Rundfunkempfänger

Rundfunkempfänger muss als eine Unterklasse BroadcastReceiver Klasse implementiert werden und außer Kraft setzen OnReceive () -Methode empfängt das Intent-Objekt als Parameter der Nachricht.

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

Registrierte Rundfunkempfänger

Durch die Anwendung in AndroidManifest.xml Rundfunkempfänger registriert Broadcast Absicht erhalten zu entwickeln. Angenommen, wir wollen MyReceiver registrieren systemgenerierte ACTION_BOOT_COMPLETED Ereignis zu überwachen. Dieses Ereignis wird ausgegeben, wenn der Prozess durch das Android-System gestartet ist abgeschlossen.

Rundfunkempfänger (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>

   </receiver>
</application>

Nun, wenn Android-Gerät aktiviert ist, werden die Abfangjäger Rundfunkempfänger MyReceiver und OnReceive () implementiert Logik ausgeführt wird.

Es gibt viele Ereignisse, die vom System erzeugt wird, als eine Klasse Intent statischen konstanten Wert definiert. In der folgenden Tabelle sind die wichtigsten Systemereignisse.

Ereignis Constants Beschreibung
android.intent.action.BATTERY_CHANGED Durable Rundfunk, einschließlich Batterieladezustand, die Höhe und andere Informationen.
android.intent.action.BATTERY_LOW Niedrige Batteriezustand Identifikationsvorrichtung.
android.intent.action.BATTERY_OKAY Identifiziert die Batterie fast leer ist, ist es nun war gut.
android.intent.action.BOOT_COMPLETED Nachdem das System wieder ausgestrahlt gebootet.
android.intent.action.BUG_REPORT Bericht anzeigen Fehler Aktivität.
android.intent.action.CALL Rufen Sie jemand die angegebenen Daten auszuführen.
android.intent.action.CALL_BUTTON Benutzer klicken Sie auf den "Call", um die Dialer oder andere geeignete Schnittstelle Wahl zu öffnen.
android.intent.action.DATE_CHANGED Datum Änderungen.
android.intent.action.REBOOT Neustart des Geräts.

Benutzerdefinierte ausgestrahlt Absicht

Wenn Sie Ihre Anwendung, um eine angepasste Absicht zu generieren und zu senden, müssen Sie erstellen und diese Absichten in der Klasse Aktivitäten durch sendBroadcast () übertragen. Wenn Sie sendStickyBroadcast (Intent) Methode verwendet werden soll permanent (klebrig) zu sein, was bedeutet, dass Ihre Absicht nach dem Abschluss der Sendung ausgestellt wurde beibehalten.

public void broadcastIntent(View view)
{
   Intent intent = new Intent();
   intent.setAction("cn.uprogrammer.CUSTOM_INTENT");
   sendBroadcast(intent);
}

cn.uprogrammer.CUSTOM_INTENT Absichten Absichten, bevor wir das gleiche Registrierungssystem erzeugen kann, wird 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="cn.uprogrammer.CUSTOM_INTENT">
         </action>
      </intent-filter>

   </receiver>
</application>

Beispiele

In diesem Beispiel wird erläutert, wie ein Rundfunkempfänger zu erstellen Sie eine benutzerdefinierte Absicht abzufangen. Sobald Sie mit benutzerdefinierten Absicht vertraut sind, können Sie die Anwendung so programmieren, dass Absicht vom System generiert abfangen. Lassen Sie uns die folgenden Schritte folgen Android-Anwendung Abschnitt Hallo Welt Beispiele zu modifizieren, die wir erstellt.

Schritt Beschreibung
1 Verwenden Sie Android Studio eine Android-Anwendung und den Namen broadcastreceiver zu erstellen und unter dem Hallo Welt Beispiele Kapitel cn.uprogrammer.broadcastreceiver Verpackung.
2 Die Hauptaktivitäten die Datei zu ändern MainActivity.java broadcastIntent () Methode hinzufügen.
3 Erstellen Sie eine neue Java-Datei MyReceiver.java bei cn.uprogrammer.broadcastreceiver Paket mit dem Namen, um den Rundfunkempfänger zu definieren.
4 Eine Anwendung kann eine oder mehrere benutzerdefinierte oder die Absicht des Systems, ohne Einschränkungen bearbeiten. Jede Absicht, Sie verbieten wollen verwenden müssen, <Empfänger ... /> Tag in AndroidManifest.xml registriert.
5 Ändern res / Layout / activity_main.xml Datei einen Standardinhalt enthält Absicht Taste zu übertragen.
6 Sie brauchen nicht die Zeichenfolge-Datei zu ändern, werden Android Studio Aufmerksamkeit string.xml Datei zahlen.
7 Starten Sie Android-Emulator die Anwendung und überprüfen Sie die Ergebnisse von Änderungen an der Anwendung auszuführen.

Hier ist der Inhalt der geänderten Hauptaktivität Datei src / cn.uprogrammer.broadcastreceiver / MainActivity.java von. Diese Datei enthält jede der Grundlebenszyklus-Ansatz. Schließlich haben wir broadcastIntent () -Methode benutzerdefinierte Ereignisse zu übertragen.

package cn.uprogrammer.broadcastreceiver;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.Intent;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    // 广播自定义意图
    public void broadcastIntent(View view){
        Intent intent = new Intent();
        intent.setAction("cn.programmer.CUSTOM_INTENT");
        sendBroadcast(intent);
    }
}

Hier ist, was src / cn.uprogrammer.broadcastreceiver / MyReceiver.java von:

package cn.uprogrammer.broadcastreceiver;

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, "检测到意图。", Toast.LENGTH_LONG).show();
    }
}

Ändern Sie dann AndroidManifest.xml Datei. Hier durch Hinzufügen <Empfänger ... /> Tag unserer Rundfunkempfänger enthalten:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.broadcastreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            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>

        </activity>

        <receiver android:name="MyReceiver">

            <intent-filter>
                <action android:name="cn.programmer.CUSTOM_INTENT">
                </action>
            </intent-filter>

        </receiver>

    </application>

</manifest>

Hier ist der Inhalt der res / Layout / activity_main.xml Datei, einschließlich Broadcast-Absicht-Buttons.

<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="广播实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="广播意图"
        android:onClick="broadcastIntent"
        android:layout_below="@+id/imageButton"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

Hier ist der Inhalt der res / Werte / strings.xml Datei definiert zwei neue Konstanten.

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Android Broadcast Receiver</string>
    <string name="action_settings">Settings</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">Main Activity</string>

</resources>

Lassen Sie uns einfach eine modifizierte Hallo Welt! Anwendung. Ich nehme an, Sie AVD während der Installationsumgebung erstellt haben. Öffnen Sie das Projekt in der aktiven Datei, klicken Sie in der Symbolleiste auf Bild Icon ausführen, um die Anwendung im Android Studio. Android Studio installieren Sie die Anwendung auf dem AVD und gestartet. Wenn alles gut geht, wird es auf dem Emulator-Fenster angezeigt werden, wie folgt:

Bild

Klicken Sie nun auf "Broadcast Absicht", um unsere eigene Absichten zu übertragen. Es wird unsere eigene Absicht "cn.programmer.CUSTOM_INTENT" ausgestrahlt, das Abfangen und unsere Logik in unserem Rundfunkempfänger implementiert Ausführung MyReceiver registriert in. Der Toast wird am Boden des Simulators angezeigt. Wie folgt:

Bild

Sie können versuchen, andere Rundfunkempfänger zu implementieren Absicht durch das System, wie zum Beispiel Systemstart, Datumsänderungen und niedrigen Stromverbrauch erzeugt abzufangen.