La obtención de un cable USB conectado al evento IN / OUT utilizando EXTRA_PLUGGED no funciona

Mi intención es haber guardado en el estado actual de Preferencias del dispositivo usb / cable de alimentación del dispositivo Android: conectado / desconectado. Desde el sitio del desarrollador veo que hay dos intenciones para obtener ese estado: ACTION_POWER_CONNECTED / DISCONNECTED. Así que usé el mismo código publicado en Developers:

Http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

En la sección Supervisar cambios en el estado de carga.

Manifiesto

<receiver android:name=".PowerConnectionReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> </intent-filter> </receiver> 

Código Java

 public class PowerConnectionReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; Toast.makeText(context, "pvr = " + usbCharge + ", " + acCharge + "," + isCharging, Toast.LENGTH_SHORT).show(); } } 

Cuando enchufo el cable USB ENTRADA / SALIDA que la difusión es siempre correctamente enviada y atrapada en PowerConnectionReceiver pero siempre con el mismo resultado (= cable enchufado).

Lo probé con Galaxy Nexus 4.1.1 / 4.2.1 – Siempre estoy recibiendo 2xFALSE en Toast (chargePlug = FALSE, usbCharge = FALSE).

¿Por qué intent.getIntExtra (BatteryManager.EXTRA_PLUGGED, -1) siempre devuelve el valor predeterminado "-1"?

Gracias.

PD. Todo funciona bien si registro receptor en Java

 Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

… en Servicio o en Actividad. Sin embargo, según el sitio de desarrolladores de Android no es prerrequisito para que el código anterior devuelva el valor correcto;

3 Solutions collect form web for “La obtención de un cable USB conectado al evento IN / OUT utilizando EXTRA_PLUGGED no funciona”

Yo estaba lidiando con el mismo problema, cruzando su puesto. Creo que el problema es que el código, en la página de formación de Android a la que proporcionó un enlace, es incorrecto.

ACTION_POWER_CONNECTED y ACTION_POWER_DISCONNECTED no están "llevando" los datos que está consultando desde la intención en su código. No pude conseguir que las mismas cosas funcionen en mis dispositivos (Gen 1 de Gen Nexus 7 con Android 4.3 y Nexus One con Android 2.3.6) y, porque parece que no funciona en ningún lado, llego al "código incorrecto" conclusión.

Lo arreglé con el siguiente código. En realidad, está muy cerca de lo que has proporcionado como una solución, excepto que va a mi BroadcastReceiver directamente y no en una actividad. En el código anterior, el fragmento aquí iría justo antes de la línea que comienza "int chargePlug". Después de eso, cambie "intención" en esa misma línea (su línea), comenzando "int chargePlug", a "mIntent".

 final Intent mIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

Tenga en cuenta que su BroadcastReceiver ahora tendrá dos intenciones. Uno pasó a él, que será la intención que contiene la acción ACTION_POWER_CONNECTED (o ACTION_POWER_DISCONNECTED), y el otro creado dentro de la BroadcastReceiver expresamente para extraer la información de la batería.

El fragmento de código que he proporcionado no funcionaría si lo colocó en una actividad (no se conectaría a su BroadcastReceiver) debido al nulo en la lista de parámetros. En realidad no estás registrando un BroadcastReceiver con ese nulo. Cambiar el nulo a su BroadcastReceiver tampoco sería ideal ya que la notificación ACTION_BATTERY_CHANGED puede activar un LOT. Estoy bastante seguro de que ACTION_BATTERY_CHANGED no estaba destinado a ser utilizado como un disparador para un BroadcastReceiver. En su lugar, creo que está destinado a ser utilizado en tiempo real para obtener la última "pegajosa" difusión con información sobre un cambio en la información de la batería (buscar "pegajosa emisión" en la documentación de Android).

Tenga en cuenta también que el fragmento que he incluido incluye "getApplicationContext ()" en la cadena de llamadas. Sácalo y los dispositivos de Gingerbread se bloquearán (gracias a CommonsWare).

No estoy seguro de por qué tienes problemas, pero lo que funcionó para mí fue registrar las acciones ACTION_POWER_CONNECTED y ACTION_POWER_DISCONNECTED:

 <receiver android:name="PowerReceiver" > <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> 

Y la implementación del receptor de radiodifusión así:

 public class PowerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction() == Intent.ACTION_POWER_CONNECTED) { //Handle power connected } else if(intent.getAction() == Intent.ACTION_POWER_DISCONNECTED){ //Handle power disconnected } } } 
 public class PowerConnectionReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { final Intent mIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); int status = mIntent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; int chargePlug = mIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; } } 
  • Desarrollo de un lector de tarjetas inteligentes en Android
  • Recopilación de datos con Android vía USB
  • Android Host: conexión con un dispositivo USB de almacenamiento masivo
  • Problema al instalar el controlador USB de Android en Galaxy SII
  • ¿Se pueden transferir datos a través de USB Host API a PC vía cable USB?
  • Comunicación USB con Android / Arduino
  • Conexión de dos dispositivos Android a través de USB
  • ¿Qué sucede después de que DTR / RTS sea enviado a una placa Arduino basada en FTDI?
  • No se puede recibir la intención de difusión de UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED
  • Mi Macbook Pro no detectará mi samsung galaxy s6
  • Dispositivos usb android, c # Xamarin
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.