Latest web development tutorials

receptor de radiodifusión Android (receptores de radiodifusión)

receptor de radiodifusión en respuesta a la mensaje de difusión a otras aplicaciones o sistemas. Estos mensajes son a veces llamados eventos o intenciones. Por ejemplo, una aplicación puede iniciar una transmisión para permitir otras aplicaciones para guiar a algunos de los datos han sido descargados en el dispositivo, y que pueden ser utilizados. Tal receptor de radiodifusión puede definir las medidas adecuadas para interceptar estas comunicaciones.

Hay dos pasos importantes para hacer el intento de sistema de radiodifusión con un receptor de trabajar.

  • Crear receptor de radiodifusión
  • receptor de radiodifusión Registrado

Hay un paso adicional para lograr el propósito de la personalizada, debe crear y transmitir estas intenciones.


Crear receptor de radiodifusión

receptor de radiodifusión debe ser implementada como una clase subclase BroadcastReceiver y anular OnReceive () método recibe el objeto intencional como un parámetro del mensaje.

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

receptor de radiodifusión Registrado

Mediante escrito registrado en el receptor de radiodifusión AndroidManifest.xml para recibir la intención de desarrollar emisión. Supongamos que queremos dar de alta MyReceiver para monitorear eventos ACTION_BOOT_COMPLETED generado por el sistema. Este evento se emite cuando el proceso iniciado por el sistema Android es completa.

receptor de radiodifusión (receptores de radiodifusión)

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

Ahora receptor, siempre que se active el dispositivo Android, los interceptores serán transmitidos MyReceiver, y OnReceive () implementan la lógica será ejecutado.

Hay muchos eventos generados por el sistema se define como un valor constante estática clase Intención. En la siguiente tabla se enumeran los eventos importantes del sistema.

Las constantes de eventos descripción
android.intent.action.BATTERY_CHANGED radiodifusión duradero, incluyendo el estado de carga de la batería, el nivel y la otra información.
android.intent.action.BATTERY_LOW dispositivo de identificación de la batería está baja.
android.intent.action.BATTERY_OKAY Identifica la energía de la batería es baja, ahora se ha sido buena.
android.intent.action.BOOT_COMPLETED Después de que el sistema se ha iniciado la emisión de nuevo.
android.intent.action.BUG_REPORT Ver informes de actividad de insectos.
android.intent.action.CALL Llamar a alguien para llevar a cabo los datos especificados.
android.intent.action.CALL_BUTTON Los usuarios hacen clic en el botón "Llamar" para abrir el marcador u otro disco de control adecuado.
android.intent.action.DATE_CHANGED Los cambios de fecha.
android.intent.action.REBOOT el reinicio del sistema.

intención de difusión personalizada

Si desea que la aplicación para generar y enviar un intento de encargo, es necesario crear y transmitir estas intenciones en las actividades de clase a través sendBroadcast (). Si utiliza el método sendStickyBroadcast (Intención) está destinado a ser permanente (pegajoso), lo que significa que su intención emitido al término de la emisión se ha mantenido.

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

intenciones cn.uprogrammer.CUSTOM_INTENT como intenciones antes de que podamos producir el mismo sistema de registro está registrado.

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

Ejemplos

En este ejemplo se explicará cómo crear un receptor de radio para interceptar un intento personalizado. Una vez que esté familiarizado con la intención de encargo, se puede programar la aplicación para interceptar la intención generada por el sistema. Vamos a seguir los siguientes pasos para modificar la sección de Android aplicación Hello World ejemplos que hemos creado.

paso descripción
1 Usar Android Studio para crear una aplicación y el nombre BroadcastReceiver Android, y se coloca bajo el capítulo ejemplos Hello World cn.uprogrammer.broadcastreceiver paquete.
2 Las principales actividades para modificar el archivo MainActivity.java añaden método broadcastIntent ().
3 Crear un nuevo archivo de Java llamado MyReceiver.java al paquete cn.uprogrammer.broadcastreceiver para definir el receptor de radiodifusión.
4 Una aplicación puede procesar uno o más personalizada o la intención del sistema, sin ningún tipo de restricciones. Cada intención desea prohibir que utilizar <receptor ... /> etiqueta registrada en AndroidManifest.xml.
5 Modificar res / layout / archivo activity_main.xml contiene un contenido predeterminado para transmitir botón intención.
6 No es necesario modificar el archivo de cadena, androide Estudio pagará archivo string.xml atención.
7 Lanzar emulador de Android para ejecutar la aplicación y verificar los resultados de los cambios realizados en la aplicación.

Este es el contenido del archivo principal de la actividad src / cn.uprogrammer.broadcastreceiver / MainActivity.java modificada. Este archivo contiene cada uno de el enfoque básico del ciclo de vida. Hemos añadido método broadcastIntent () para transmitir eventos personalizados.

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

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

A continuación, modifique el archivo AndroidManifest.xml. Aquí añadiendo la etiqueta <receptor ... /> para incluir nuestro receptor de radiodifusión:

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

Este es el contenido del archivo res / layout / activity_main.xml, incluidos los botones personalizados intención de difusión.

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

Este es el contenido de res / valores de archivo / strings.xml define dos nuevas 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>

Vamos a ejecutar una aplicación Hello World! Modificada. Asumo que ha creado AVD en el entorno de instalación. Abra el proyecto en el archivo activo, haga clic en la barra de herramientas imagen Icono para ejecutar la aplicación en Android Studio. Android Estudio instalar la aplicación en la AVD y la inicia. Si todo va bien, se mostrará en la ventana de emulación de la siguiente manera:

imagen

Ahora haga clic en el botón "Broadcast intención" para transmitir nuestras intenciones personalizados. Será transmitido nuestra intención de encargo "cn.programmer.CUSTOM_INTENT", interceptar y ejecución de nuestra lógica está implementada en nuestro receptor de radiodifusión MyReceiver registrada en. La tostada aparecerá en la parte inferior del simulador. En la siguiente manera:

imagen

Usted puede tratar de poner en práctica otro receptor de radiodifusión para interceptar la intención generada por el sistema, como el inicio del sistema, cambios de fecha y bajo consumo de energía.