Activar y desactivar un receptor de difusión
Intento activar y deshabilitar un receptor de difusión utilizando este método PackageManager:
setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
El receptor de radiodifusión está registrado en el manifiesto. El receptor funciona bien, pero cuando intento deshabilitarlo, todavía recibe los mensajes de difusión. Cuando desactivo el receptor en el manifiesto por "android: enabled =" false "", el receptor no recibe nada pero no puedo habilitarlo.
- ¿Es seguro iniciar un nuevo subproceso en un BroadcastReceiver?
- ¿Cómo puedo mostrar un diálogo desde un receptor de difusión de Android?
- ¿Qué es 'action android: name = "com.android.vending.INSTALL_REFERRER"'?
- Android BroadcastReceiver dentro de la actividad
- Android BootReceiver no funciona
Llamo el método desde dentro de un servicio.
PackageManager pm = getApplicationContext().getPackageManager(); ComponentName componentName = new ComponentName("com.app", ".broadcast_receivers.OnNetworkChangedReceiver"); pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Manifiesto de Android:
<receiver android:name=".broadcast_receivers.OnNetworkChangedReceiver" android:enabled="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver>
El receptor
public class OnNetworkChangedReceiver extends BroadcastReceiver { private static final String TAG = "OnNetworkChangedReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "in OnNetworkChanged"); } }
También llamé el método de dentro de una actividad de ayer. Pensé que funcionó, pero hoy nada funciona más. ¿Podría ser que a veces hay un gran retraso en la intención (android.net.conn.CONNECTIVITY_CHANGE) que he malinterpretado ayer como deshabilitar el receptor?
¿Es el enfoque con el PackageManager la dirección correcta o hay un error básico en la idea?
Muchas gracias, Sven
- Android BroadcastReceiver no funciona después de la instalación
- LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) y Context.unregisterReceiver () son iguales?
- ¿Cómo utilizar Broadcast Receiver en diferentes aplicaciones en Android?
- BroadcastReceiver intentando devolver el resultado durante una transmisión no ordenada. Error extraño
- Android.intent.action.SCREEN_ON no funciona como filtro de intenciones de recepción
- Llamar a SetContentView () desde el receptor de difusión
- El receptor de reinicio no funciona en los teléfonos xiaomi
- Android <receptor> - BroadcastReceiver no se llama
Bueno, lo que básicamente tienes parece bien. Tengo el siguiente código en uno de mis proyectos :
boolean enabled=prefs.getBoolean(key, false); int flag=(enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED); ComponentName component=new ComponentName(EditPreferences.this, OnBootReceiver.class); getPackageManager() .setComponentEnabledSetting(component, flag, PackageManager.DONT_KILL_APP);
Utilizo esto para deshabilitar un receptor BOOT_COMPLETED
cuando no tengo ninguna alarma activa que deba programarse.
Mi conjetura es que su ComponentName
no se fija correctamente (eg, su principal .
). Pruebe el constructor que estoy usando, que toma un Context
y una Class
como parámetros.
Creo que usar el PackageManager es excesivo su situación. Usted tiene un BroadcastReceiver que necesita a veces ignorar las emisiones que está escuchando. Puedo pensar en dos maneras fáciles de ir sobre esto:
1) Establecer una bandera que su receptor puede comprobar para ignorar o aceptar transmisiones, y no se preocupe por habilitar / deshabilitar en absoluto.
2) Cree BroadcastReceiver de forma programática (puede ser una clase interna, incluso), y regístrese y anule su registro como necesite en determinadas partes de su aplicación.
En general he encontrado que la definición de mi BroadcastReceivers en código en lugar de XML ha proporcionado una mayor flexibilidad y es generalmente más fácil para mí para gestionar.
- Diferencia entre el simulador de iPhone y el emulador de Android
- Obtener un objeto JSON desde una respuesta HTTP