2010-07-16 15 views

Respuesta

9

Configure un BroadcastReceiver para ACTION_BATTERY_CHANGED. Un Intent extra le dirá cuál es el estado de carga: consulte BatteryManager para obtener más información.

+0

Gracias! No hay forma de sondear esta información? – NPike

+0

@NPike: vea los comentarios sobre esta [respuesta aceptada] (http://stackoverflow.com/questions/3997289/get-temperature-of-battery-on-android/3997349#3997349) para otra pregunta - uno puede obtener el estado actual utilizando el método que se muestra allí sin suscribirse. –

+1

Sea preciso: intención ix = main.registerReceiver (null, nuevo IntentFilter (Intent.ACTION_BATTERY_CHANGED)); \t \t \t \t boolean plugged = ix! = Null && ix.getIntExtra ("enchufado", 0)! = 0; – mdiener

59

En AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <receiver android:name=".receiver.PlugInControlReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> 
      <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> 
     </intent-filter> 
    </receiver> 
</application> 

En Código

public class PlugInControlReceiver extends BroadcastReceiver { 
    public void onReceive(Context context , Intent intent) { 
     String action = intent.getAction(); 

     if(action.equals(Intent.ACTION_POWER_CONNECTED)) { 
      // Do something when power connected 
     } 
     else if(action.equals(Intent.ACTION_POWER_DISCONNECTED)) { 
      // Do something when power disconnected 
     } 
    } 
} 
+3

Tenga en cuenta que el método onReceive() debe estar en la clase PlugInControlReceiver que extiende BroadcastReceiver. –

+1

Gracias por su amable explicación @OdedBreiner –

+0

pero la solución anterior no funciona para teléfonos móviles VIVO y OPPO –

-1

Otra cosa que debe comprobar si hay errores en el manifiesto ---> aplicación. Si luego hace clic en el campo que muestra el error y simplemente hace clic en el enlace "Nombre" , aparece el cuadro de diálogo para agregar una clase. agregue la clase y en la clase copie el código de on receive. Ese es el código anterior que debe copiarse en el archivo de clase, no en la actividad principal. Gracias Pzycoderz

1

otra forma está utilizando el administrador de la batería. i utilizable para esta API> = 21

public class PowerUtil { 
    public static boolean isConnected(Context context) { 
     Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
     int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
     return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB; 
    } 
} 
-1

Aquí hay otra manera de sondear la información:

leer los valores aquí: ex.

a través de la cáscara androide:

cat /sys/class/power_supply/usb/online 

1 = conectado, 0 = no. Refleja el estado de la conexión USB.

cat/sys/class/power_supply/ac/línea

1 = conectado, 0 = no. Refleja el estado de la conexión de CA.

Utilizando ambos elementos juntos, creo que indicarán si el dispositivo está recibiendo alimentación o no. No estoy seguro si la ubicación es la misma para todos los dispositivos. Encontré la misma ubicación en Android 7+ y 5+, en una tableta Samsung y en un dispositivo RockChip.

Cuestiones relacionadas