2012-04-17 2 views
5

Я хочу обнаружить изменение батареи при каждом проценте. Я могу определить уровень заряда батареи один раз с широковещательным приемником. Но его значение не обновляется автоматически при изменении% от 66 до 67.Обнаруживать Изменение состояния батареи при каждом проценте в android

Вот мой код.

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); 

    } 

разрешение Добавлено

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

Это обнаружить 66, но когда она изменится 65 или 67 не будет обновлять значение. или не отображать журнал слишком

Я хочу сделать это, как я могу получить каждое изменение.

Заранее спасибо.

ответ

12

Во-первых, вам не нужно разрешение BATTERY_STATS.

Во-вторых, самая первая строка вашего onReceive() отменяет регистрацию вашего BroadcastReceiver, тем самым предотвращая получение каких-либо дополнительных обновлений.

В-третьих, нет гарантии, что у вас будет информация о батареях, предоставленная вам для каждого изменения 1%. Многие телефоны Motorola, например, отправляют только ACTION_BATTERY_CHANGED каждые 10%, пока батарея не разрядится. Решение о том, как часто транслировать ACTION_BATTERY_CHANGED, зависит от производителя устройства, а не от вас.

Смежные вопросы