Latest web development tutorials

Ricevitore trasmissione Android (Broadcast Ricevitori)

Ricevitore Broadcast in risposta al messaggio di trasmissione ad altre applicazioni o sistemi. Questi messaggi sono a volte chiamati eventi o intenzioni. Ad esempio, un'applicazione può avviare una trasmissione per consentire altre applicazioni per guidare alcuni dei dati è stato scaricato sul dispositivo, e possono essere utilizzati. Tale ricevitore trasmissione può definire azioni appropriate per intercettare queste comunicazioni.

Ci sono due passi importanti per rendere l'intento di sistema di trasmissione con un ricevitore broadcast per lavorare.

  • Creare ricevitore trasmissione
  • Ricevitore trasmissione registrata

Vi è un ulteriore passo per raggiungere l'intento del costume, è necessario creare e trasmettere queste intenzioni.


Creare ricevitore trasmissione

ricevitore broadcast deve essere implementato come una classe sottoclasse BroadcastReceiver e sovrascrivere OnReceive () metodo riceve l'oggetto Intent come parametro del messaggio.

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

Ricevitore trasmissione registrata

Con atto introduttivo depositato ricevitore trasmissione AndroidManifest.xml a ricevere l'intento di trasmissione per lo sviluppo. Supponiamo di voler registrare MyReceiver per monitorare generato dal sistema evento ACTION_BOOT_COMPLETED. Questo evento viene emesso quando il processo avviato dal sistema Android è completo.

Ricevitore Broadcast (Broadcast Ricevitori)

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

Ricevitore Ora, ogni volta che viene attivato dispositivo Android, gli intercettori saranno trasmessi MyReceiver, e OnReceive () implementate verrà eseguita la logica.

Ci sono molti eventi generati dal sistema è definito come classe Intent valore costante statico. Nella tabella seguente sono elencati gli importanti eventi di sistema.

Costanti eventi descrizione
android.intent.action.BATTERY_CHANGED trasmissione durevole, tra cui lo stato di carica della batteria, il livello e altre informazioni.
android.intent.action.BATTERY_LOW dispositivo di identificazione condizione di batteria scarica.
android.intent.action.BATTERY_OKAY Identifica la potenza della batteria è bassa, è ora è stato buono.
android.intent.action.BOOT_COMPLETED Dopo che il sistema termina l'avvio di nuovo in onda.
android.intent.action.BUG_REPORT Visualizza Report attività di bug.
android.intent.action.CALL Chiamare qualcuno per eseguire i dati specificati.
android.intent.action.CALL_BUTTON Gli utenti fanno clic sul pulsante "Chiama" per aprire la composizione o altra interfaccia di connessione adatta.
android.intent.action.DATE_CHANGED cambia data.
android.intent.action.REBOOT riavvio del dispositivo.

intento in onda su misura

Se si desidera che l'applicazione per generare e inviare un intento personalizzato, è necessario creare e trasmettere queste intenzioni in attività di classe attraverso sendBroadcast (). Se si utilizza il metodo sendStickyBroadcast (Intent) è destinato a essere permanente (appiccicoso), il che significa che il vostro intento rilasciato dopo il completamento della trasmissione è stata mantenuta.

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

cn.uprogrammer.CUSTOM_INTENT intenzioni intenzioni prima di poter produrre lo stesso sistema di registrazione è registrata.

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

Esempi

Questo esempio spiega come creare un ricevitore broadcast per intercettare un intento personalizzato. Una volta che si ha familiarità con l'intento personalizzato, è possibile programmare l'applicazione per intercettare intento generato dal sistema. Seguiamo le seguenti operazioni per modificare Android applicazione Ciao Mondo Esempi sezione che abbiamo creato.

passo descrizione
1 Utilizzare Android Studio per creare un'applicazione e nome broadcastreceiver Android, e posto sotto la Ciao Mondo capitolo esempi cn.uprogrammer.broadcastreceiver pacchetto.
2 Le principali attività per modificare il file MainActivity.java aggiungono metodo broadcastIntent ().
3 Creare un nuovo file denominato Java MyReceiver.java al pacchetto cn.uprogrammer.broadcastreceiver per definire il ricevitore broadcast.
4 Un'applicazione in grado di elaborare una o più personalizzato o l'intenzione del sistema, senza alcuna restrizione. Ogni intenzione di voler vietare bisogno di usare tag <ricevitore ... /> registrata in AndroidManifest.xml.
5 Modifica res / layout / file di activity_main.xml contiene una formulazione di base per trasmettere pulsante di intenti.
6 Non è necessario modificare il file di stringa, Android Studio presterà file di string.xml attenzione.
7 Avviare emulatore di Android per eseguire l'applicazione e verificare i risultati delle modifiche apportate all'applicazione.

Ecco il contenuto del file di attività principale src / cn.uprogrammer.broadcastreceiver / MainActivity.java modificata. Questo file contiene ciascuno dei approccio di base del ciclo di vita. Abbiamo aggiunto il metodo broadcastIntent () per trasmettere eventi personalizzati.

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);
    }
}

Ecco cosa src / cn.uprogrammer.broadcastreceiver / MyReceiver.java di:

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();
    }
}

Poi modificare il file AndroidManifest.xml. Qui con l'aggiunta di tag <ricevitore ... /> per includere il nostro ricevitore di trasmissione:

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

Ecco il contenuto del file res / layout / activity_main.xml, tra cui pulsanti personalizzati intenti trasmessi.

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

Ecco il contenuto della res / valori file / strings.xml definisce due nuove costanti.

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

Diciamo solo eseguire un'applicazione Ciao Mondo! Modificata. Presumo che hai creato AVD durante l'ambiente di installazione. Aprire il progetto nel file attivo, fare clic sulla barra degli strumenti immagine Icona per eseguire l'applicazione in Android Studio. Android Studio installare l'applicazione sul AVD e lo avvia. Se tutto va bene, sarà visualizzata la finestra di emulazione come segue:

immagine

Ora cliccare sul pulsante "Broadcast intenti" per trasmettere le nostre intenzioni personalizzati. Essa trasmetterà il nostro intento personalizzato "cn.programmer.CUSTOM_INTENT", intercettando ed eseguendo la nostra logica implementato nel nostro ricevitore trasmissione MyReceiver registrato in. Il brindisi verrà visualizzato nella parte inferiore del simulatore. Come segue:

immagine

Si può cercare di implementare un altro ricevitore trasmissione di intercettare intento generato dal sistema, come ad esempio l'avvio del sistema, cambi di data e l'uso di bassa potenza.