2012-04-17 17 views
5

Quiero detectar el cambio de batería en cada porcentaje. Puedo detectar el nivel de batería una vez con el receptor de difusión. Pero no está actualizando el valor automáticamente cuando% cambia de 66 a 67.Detectar cambiar el estado de la batería en cada porcentaje en android

Aquí está mi código.

private void batteryLevel() { 
     BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() { 
      public void onReceive(Context context, Intent intent) { 
       context.unregisterReceiver(this); 
       Log.i("Battery CHANGED******",":: IN RECEIVER"); 

       int rawlevel = intent.getIntExtra("level", -1); 
       int scale = intent.getIntExtra("scale", -1); 
       int level = -1; 
       if (rawlevel >= 0 && scale > 0) { 
        level = (rawlevel * 100)/scale; 
       } 
       btnConsumer.setText("Battery Level Remaining: " + level + "%"); 
      } 
     }; 
     IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(batteryLevelReceiver, batteryLevelFilter); 

    } 

Agregado permiso

<uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission> 

Se detectan 66 pero cuando se cambia 65 o 67 no actualizará el valor. o no mostrar el registro también

Quiero que sea como puedo conseguir cada cambio.

Gracias de antemano.

Respuesta

12

Primero, no necesita el permiso BATTERY_STATS.

En segundo lugar, la primera línea de su onReceive() anula el registro de su BroadcastReceiver, impidiéndole así obtener más actualizaciones.

En tercer lugar, no hay garantía de que se le enviará la información de la batería por cada 1% de cambio. Muchos teléfonos Motorola, por ejemplo, solo envían ACTION_BATTERY_CHANGED cada 10% hasta que la batería se agota. La decisión sobre la frecuencia con la que se transmitirá ACTION_BATTERY_CHANGED depende del fabricante del dispositivo, no usted.

Cuestiones relacionadas