En este tutorial, aprenderá cómo implementar un receptor de transmisión en su aplicación de Android. Broadcast Receiver es completamente asincrónico y se considera un proceso en primer plano y seguirá ejecutándose con el sistema Android. Crearemos una actividad que consiste en un ToggleButton y un CheckBox que enciende o apaga el Wifi y el receptor de transmisión. Se mostrará una notificación si el receptor de transmisión se enciende mientras se enciende o apaga el Wi-Fi. Vamos a empezar…
Descargue la biblioteca de soporte más reciente
Descargue la última revisión de la biblioteca de soporte 13 .
Enlace: http://developer.android.com/tools/extras/support-library.html
Reemplace la biblioteca de soporte anterior ( android-support-v4.jar ) con la nueva biblioteca de soporte en su proyecto.
Cree un nuevo proyecto en Eclipse File > New > Android Application Project. Complete los detalles y nombre su proyecto BroadcastTutorial .
Nombre de la aplicación: BroadcastTutorial
Nombre del proyecto: BroadcastTutorial
Nombre del paquete: com.androidbegin.broadcasttutorial
Abra su MainActivity .java y pegue el siguiente código.
Actividad principal .java
paquete com.androidbegin.broadcasttutorial; importar android.net.ConnectivityManager; importar android.net.wifi.WifiManager; importar android.os.Bundle; importar android.app.Actividad; importar android.content.ComponentName; importar android.content.Context; importar android.content.pm.PackageManager; importar android.view.Menú; importar android.view.View; importar android.view.View.OnClickListener; importar android.widget.CheckBox; importar android.widget.Toast; importar android.widget.ToggleButton; clase pública MainActivity extiende Actividad { // Declarar Variables Botón de alternancia wifitoggle; Casilla de verificación brcheckbox; @Anular public void onCreate (Paquete guardadoInstanceState) { super.onCreate(estadoDeInstanciaGuardado); // Obtener la vista de activity_main.xml setContentView(R.diseño.actividad_principal); // Localice el ToggleButton en activity_main.xml wifitoggle = (ToggleButton) findViewById(R.id.wifitoggle); // Localice el CheckBox en activity_main.xml brcheckbox = (CheckBox) findViewById(R.id.brcheckbox); // WifiManager para controlar el Servicio Wifi wifiManager final wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); // Capturar clics en ToggleButton wifitoggle.setOnClickListener(nueva Vista.OnClickListener() { @Anular public void onClick(Ver v) { // TODO stub de método generado automáticamente si (wifitoggle.isChecked()) { // Activar Wi-Fi wifiManager.setWifiEnabled(verdadero); } más { // Apagar Wi-Fi wifiManager.setWifiEnabled(falso); } } }); // Capturar clics en CheckBox brcheckbox.setOnClickListener(nuevo OnClickListener() { @Anular public void onClick(Ver v) { // TODO stub de método generado automáticamente si (brcheckbox.isChecked()) { // Encienda el receptor de transmisión PackageManager pm = MainActivity.this.getPackageManager(); NombreComponente NombreComponente = new NombreComponente( MainActivity.this, BroadcastManager.class); pm.setComponentEnabledSetting(nombre del componente, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); Toast.makeText(getApplicationContext(), "Receptor de transmisión iniciado", Toast.LENGTH_LONG) .mostrar(); } más { // Apagar el receptor de transmisión PackageManager pm = MainActivity.this.getPackageManager(); NombreComponente NombreComponente = new NombreComponente( MainActivity.this, BroadcastManager.class); pm.setComponentEnabledSetting(nombre del componente, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); Toast.makeText(getApplicationContext(), "Receptor de transmisión detenido", Toast.LENGTH_LONG) .mostrar(); } } }); // Si Wi-Fi ya está encendido, cambie ToggleButton a encendido ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); si (cm.getActiveNetworkInfo() != nulo && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) { wifitoggle.setChecked(verdadero); } } // No usar el menú de opciones en este tutorial @Anular public boolean onCreateOptionsMenu(Menú menú) { getMenuInflater().inflate(R.menu.actividad_principal, menú); devolver verdadero; } }
En esta actividad, hemos creado una palanca y un botón de casilla de verificación. Al hacer clic en el botón de alternar, se encenderán o apagarán los servicios wifi y al marcar o desmarcar la casilla de verificación, se iniciará o detendrá el receptor de transmisión.
A continuación, cree un diseño gráfico XML para su MainActivity. Vaya a res > diseño > Haga clic con el botón derecho en el diseño > Nuevo > Archivo XML de Android
Nombre su nuevo archivo XML activity_main.xml y pegue el siguiente código.
actividad_principal .xml
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android" xmlns_herramientas="http://esquemas.android.com/herramientas" android_layout_width="match_parent" android_layout_height="match_parent" > <Botón Alternar android_id="@+id/wifitoggle" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_centerHorizontal="verdadero" android_layout_centerVertical="verdadero" android_textOff="@cadena/wifioff" android_textOn="@cadena/wifion" /> <Casilla de verificación android_id="@+id/brcasilla de verificación" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_below="@+id/wifitoggle" android_layout_centerHorizontal="verdadero" android_layout_centerVertical="verdadero" android_text="@cadena/BroadcastReceiver" /> </RelativeLayout>
Producción:
A continuación, cree una clase de receptor de difusión. Vaya a Archivo > Nuevo > Clase y asígnele el nombre BroadcastManager.java. Seleccione su paquete llamado com.androidbegin. broadcasttutorial y haga clic en Finalizar .
Abra su BroadcastManager .java y pegue el siguiente código.
BroadcastManager.java
paquete com.androidbegin.broadcasttutorial; importar android.app.NotificationManager; importar android.app.PendingIntent; importar android.content.BroadcastReceiver; importar android.content.Context; importar android.content.Intent; importar android.net.ConnectivityManager; importar android.net.NetworkInfo; importar android.support.v4.app.NotificationCompat; clase pública BroadcastManager extiende BroadcastReceiver { @Anular public void onReceive(Contexto contexto, Intención intención) { if (!isNetworkAvailable(contexto)) { Notificación (contexto, "Conexión wifi desactivada"); } más { Notificación (contexto, "Conexión wifi activada"); } } Notificación de vacío público (contexto de contexto, mensaje de cadena) { // Establecer título de notificación String strtitle = context.getString(R.string.notificationtitle); // Abrir la clase NotificationView al hacer clic en la notificación Intención intención = nueva intención (contexto, NotificationView.class); // Enviar datos a la clase NotificationView intent.putExtra("título", strtitle); intent.putExtra("texto", mensaje); // Abrir NotificationView.java Actividad PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // Crear notificación usando NotificationCompat.Builder Generador de NotificationCompat.Builder = new NotificationCompat.Builder( contexto) // Establecer icono .setSmallIcon(R.dibujable.logopequeño) // Establecer mensaje de teletipo .setTicker(mensaje) // Establecer título .setContentTitle(context.getString(R.string.notificationtitle)) // Establecer texto .setContentText(mensaje) // Agregue un botón de acción debajo de la notificación .addAction(R.drawable.ic_launcher, "Botón de acción", pIntent) // Establecer PendingIntent en Notificación .setContentIntent(pIntent) // Descartar notificación .setAutoCancel(verdadero); // Crear administrador de notificaciones Administrador de notificaciones administrador de notificaciones = (Administrador de notificaciones) contexto .getSystemService(Contexto.NOTIFICACIÓN_SERVICIO); // Crear notificación con el administrador de notificaciones administrador de notificaciones.notificar(0, constructor.construir()); } // Comprobar la disponibilidad de la red booleano privado isNetworkAvailable (contexto contexto) { ConnectivityManager connectionsManager = (ConnectivityManager) contexto .getSystemService(Context.CONECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = administrador de conectividad .getActiveNetworkInfo(); volver activeNetworkInfo != nulo; } }
Broadcast Receiver comprueba la disponibilidad de la red de forma asíncrona. Entonces, si el wifi está encendido o apagado, la aplicación será notificada de inmediato y se mostrará una notificación.
Producción:
A continuación, cree una actividad para ver los resultados al hacer clic en la notificación. Vaya a Archivo > Nuevo > Clase y asígnele el nombre NotificationView.java. Seleccione su paquete llamado com.androidbegin.broadcasttutorial y haga clic en Finalizar .
Abra su NotificationView .java y pegue el siguiente código.
Vista de notificación .java
paquete com.androidbegin.broadcasttutorial; importar android.app.Actividad; importar android.app.NotificationManager; importar android.content.Intent; importar android.os.Bundle; importar android.widget.TextView; La clase pública NotificationView extiende la actividad { // Declarar variable Título de cadena; Cadena de texto; TextView txttítulo; Vista de texto texto de texto; @Anular public void onCreate (Paquete guardadoInstanceState) { super.onCreate(estadoDeInstanciaGuardado); setContentView(R.layout.notificationview); // Crear administrador de notificaciones Administrador de notificaciones administrador de notificaciones = (Administrador de notificaciones) getSystemService (NOTIFICACIÓN_SERVICIO); // Descartar notificación administrador de notificaciones.cancel(0); // Recuperar los datos de MainActivity.java Intención i = getIntent(); título = i.getStringExtra("título"); texto = i.getStringExtra("texto"); // Localiza la vista de texto txttitle = (TextView) findViewById(R.id.title); txttext = (TextView) findViewById(R.id.text); // Establecer los datos en TextView txttitle.setText(título); txttext.setText(texto); } }
A continuación, cree un diseño gráfico XML para ver una notificación. Vaya a res > diseño > Haga clic con el botón derecho en diseño > Nuevo > Archivo XML de Android
Asigne un nombre a su nuevo archivo XML como notificaciónview.xml y pegue el siguiente código.
notificaciónview.xml
<?versión xml="1.0" codificación="UTF-8"?> <RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android" xmlns_herramientas="http://esquemas.android.com/herramientas" android_layout_width="fill_parent" android_layout_height="fill_parent" > <Vista de texto android_id="@+id/lbltitle" android_layout_width="wrap_content" android_layout_height="wrap_content" android_text="@cadena/lbltitle" /> <Vista de texto android_id="@+id/lbltext" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_below="@+id/título lbl" android_text="@cadena/lbltext" /> <Vista de texto android_id="@+id/título" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_toRightOf="@+id/lbltitle" /> <Vista de texto android_id="@+id/texto" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_below="@+id/título" android_layout_toRightOf="@+id/lbltext" /> </RelativeLayout>
A continuación, cambie el nombre y los textos de la aplicación. Abra su strings.xml en su carpeta res > valores y pegue el siguiente código.
cadenas.xml
<recursos> <string name="app_name">Tutorial de transmisión</string> <string name="hello_world">¡Hola mundo!</string> <string name="menu_settings">Configuración</string> <string name="title_activity_main">Tutorial de transmisión</string> <string name="notificationtitle">Tutorial de transmisión</string> <string name="lbltitle">"Título: "</string> <string name="lbltext">"Texto: "</string> <string name="BroadcastReceiver">Receptor de transmisión</string> <string name="wifioff">WIFI APAGADO</string> <string name="wifion">WIFI ACTIVADO</string> </recursos>
En su AndroidManifest.xml , debemos declarar una actividad, un administrador de transmisión y permisos para permitir que la aplicación cambie el estado de wifi y la capacidad de acceder al estado de la red. Abra su AndroidManifest.xml y pegue el siguiente código.
AndroidManifest.xml
<manifiesto xmlns_android="http://schemas.android.com/apk/res/android" paquete="com.androidbegin.broadcasttutorial" android_versionCode="1" android_versionName="1.0" > <usos-sdk android_minSdkVersion="8" android_targetSdkVersion="15" /> <usos-permiso android_name="android.permission.CHANGE_WIFI_STATE" /> <usos-permiso android_name="android.permission.ACCESS_NETWORK_STATE" /> <aplicación android_icono="@dibujable/ic_launcher" android_etiqueta="@cadena/nombre_aplicación" android_tema="@estilo/AppTheme" > <actividad android_nombre=".Actividad principal" android_label="@cadena/título_actividad_principal" > <intent-filter> <acción android_name="android.intent.action.MAIN" /> <categoría android_name="android.intent.category.LAUNCHER" /> </intent-filter> </actividad> <receptor android_name=".BroadcastManager" > <intent-filter> <acción android_name="android.net.conn.CONECTIVITY_CHANGE" /> </intent-filter> </receptor> <actividad android_name=".NotificationView" > </actividad> </aplicación> </manifiesto>
Producción: