Latest web development tutorials

récepteur de radiodiffusion Android (récepteurs Broadcast)

Récepteur radio en réponse au message de diffusion vers d'autres applications ou systèmes. Ces messages sont parfois appelés des événements ou des intentions. Par exemple, une application peut lancer une émission pour permettre à d'autres applications pour guider une partie des données a été téléchargé sur le périphérique, et ils peuvent être utilisés. Ce récepteur de radiodiffusion peut définir des mesures appropriées pour intercepter ces communications.

Il y a deux étapes importantes à faire l'intention du système de radiodiffusion avec un récepteur de radiodiffusion à travailler.

  • Créer récepteur de radiodiffusion
  • récepteur de radiodiffusion enregistré

Il y a une étape supplémentaire pour atteindre le but de la coutume, vous devez créer et diffuser ces intentions.


Créer récepteur de radiodiffusion

Récepteur radio doit être mis en œuvre en tant que classe sous-classe BroadcastReceiver et remplacer OnReceive () méthode reçoit l'objet Intent comme un paramètre du message.

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

récepteur de radiodiffusion enregistré

Par requête enregistrée dans le récepteur de radiodiffusion AndroidManifest.xml pour recevoir la diffusion intention de développer. Supposons que nous voulons enregistrer MyReceiver pour surveiller ACTION_BOOT_COMPLETED événement généré par le système. Cet événement est émis lorsque le processus a commencé par le système Android est terminée.

Récepteur radio (Récepteurs Broadcast)

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

récepteur Maintenant, chaque fois appareil Android est activé, les intercepteurs seront diffusés MyReceiver et OnReceive () mis en œuvre la logique sera exécutée.

Il y a beaucoup d'événements générés par le système est défini comme une valeur constante statique de classe Intent. Le tableau suivant répertorie les événements importants du système.

Constantes de l'événement description
android.intent.action.BATTERY_CHANGED radiodiffusion durable, y compris l'état de charge, le niveau et d'autres informations sur la batterie.
android.intent.action.BATTERY_LOW Faible dispositif d'identification de l'état de la batterie.
android.intent.action.BATTERY_OKAY Identifie la puissance de la batterie est faible, il est maintenant a été bonne.
android.intent.action.BOOT_COMPLETED Après que le système a fini de démarrer à nouveau diffusé.
android.intent.action.BUG_REPORT Afficher Rapport d'activité de bug.
android.intent.action.CALL Appeler quelqu'un pour effectuer les données spécifiées.
android.intent.action.CALL_BUTTON Les utilisateurs cliquent sur le bouton «Appeler» pour ouvrir le composeur ou une autre ligne d'interface approprié.
android.intent.action.DATE_CHANGED Les changements de date.
android.intent.action.REBOOT redémarrage de l'appareil.

intention de diffuser personnalisée

Si vous souhaitez que votre application pour générer et envoyer une intention personnalisée, vous devez créer et transmettre ces intentions dans les activités de classe à travers sendBroadcast (). Si vous utilisez sendStickyBroadcast méthode (intention) est destiné à être permanent (collant), ce qui signifie que votre intention délivrée à la fin de l'émission a été maintenue.

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

intentions cn.uprogrammer.CUSTOM_INTENT comme intentions avant que nous puissions produire le même système d'enregistrement est enregistré.

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

Exemples

Cet exemple vous expliquera comment créer un récepteur de radiodiffusion pour intercepter une intention personnalisée. Une fois que vous êtes familier avec l'intention personnalisée, vous pouvez programmer l'application pour intercepter l'intention générée par le système. Suivons les étapes suivantes pour modifier la section Android de l'application Bonjour tout le monde Exemples nous avons créé.

étape description
1 Utilisez Android Studio pour créer une application et le nom BroadcastReceiver Android, et placé sous le chapitre des exemples Bonjour tout le monde cn.uprogrammer.broadcastreceiver package.
2 Les principales activités pour modifier le fichier MainActivity.java ajouter méthode broadcastIntent ().
3 Créer un nouveau fichier Java nommé MyReceiver.java au package cn.uprogrammer.broadcastreceiver pour définir le récepteur de radiodiffusion.
4 Une application peut traiter un ou plusieurs coutume ou l'intention du système, sans aucune restriction. Chaque intention que vous voulez interdire besoin d'utiliser <récepteur ... /> tag enregistré dans AndroidManifest.xml.
5 Modifier res / layout / fichier activity_main.xml contient un contenu par défaut pour diffuser le bouton intention.
6 Vous ne devez pas modifier le fichier de chaîne, Android Studio payer fichier attention string.xml.
7 Lancez l'émulateur Android pour exécuter l'application et de vérifier les résultats des modifications apportées à l'application.

Voici le contenu du fichier principal de l'activité src / cn.uprogrammer.broadcastreceiver / MainActivity.java modifiée. Ce fichier contient chacun de l'approche de base du cycle de vie. Nous avons ajouté la méthode broadcastIntent () pour diffuser des événements personnalisés.

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

Voici ce que src / cn.uprogrammer.broadcastreceiver / MyReceiver.java de:

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

Ensuite, modifier le fichier AndroidManifest.xml. Ici en ajoutant <récepteur ... /> pour inclure notre récepteur de diffusion:

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

Voici le contenu du fichier res / layout / activity_main.xml, y compris des boutons personnalisés intention diffusés.

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

Voici le contenu de res / valeurs / fichier strings.xml définit deux nouvelles constantes.

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

Disons simplement exécuter une application Bonjour tout le monde! Modifié. Je suppose que vous avez créé AVD au cours de l'environnement d'installation. Ouvrez votre projet dans le fichier actif, cliquez sur la barre d'outils image Icône pour exécuter l'application Dans Android Studio. Android studio installer l'application sur la DAV et démarre. Si tout va bien, il sera affiché sur la fenêtre de l'émulateur comme suit:

image

Maintenant, cliquez sur le bouton "Diffusion intention" de diffuser nos intentions personnalisées. Elle diffusera notre intention personnalisée "cn.programmer.CUSTOM_INTENT", l'interception et l'exécution de notre logique mis en œuvre dans notre récepteur de radiodiffusion MyReceiver enregistré dans. Le toast apparaîtra au bas du simulateur. Comme suit:

image

Vous pouvez essayer de mettre en œuvre un autre récepteur de radiodiffusion afin d'intercepter l'intention générée par le système, tels que le démarrage du système, les changements de date et de faible consommation d'énergie.