trato de activar y desactivar un receptor de radiodifusión mediante el uso de este método PackageManager:Activar y desactivar un receptor de radiodifusión
setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
El receptor de radiodifusión se ha registrado en el manifiesto. El receptor funciona bien, pero cuando intento desactivarlo, 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.
Llamo al 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");
}
}
I también conocido como método del interior de una Actividad de ayer. Pensé que funcionaba, pero hoy ya nada funciona. ¿Podría ser que a veces hay una gran demora en la intención (android.net.conn.CONNECTIVITY_CHANGE) que malinterpreté ayer como desactivando el receptor?
¿El enfoque con el PackageManager es la dirección correcta o hay un error básico en la idea?
Muchas gracias, Sven
Por cierto @Sven, su error inicial fue muy común. Su ComponentName necesario ("com.app", "com.app.broadcast_receivers.OnNetworkChangedReceiver"); Me doy cuenta de que esta solución se ve extraña, porque el nombre del paquete parece estar en la lista dos veces. Y desde el 'Nuevo Asistente de Android ...'Puede que solo le pida un solo nombre de paquete cuando crea un proyecto, es fácil pensar que solo hay uno, pero bajo las coberturas realmente toma esa cadena que le da y le asigna dos nombres diferentes de paquete, tanto el paquete de Aplicación nombre y también el nombre del paquete de actividad. –
Usar '0' en lugar de' PackageManager.DONT_KILL_APP' también podría ayudarlo a deshacerse de la actividad, si estoy leyendo los documentos correctamente: http://developer.android.com/reference/android/content/pm/PackageManager .html en la sección 'SetComponentEnabledSetting'. –