2012-04-17 15 views
5

Chcę wykryć zmianę baterii w każdym procencie. Jestem w stanie wykryć poziom naładowania baterii raz z odbiornikiem radiowym. Ale nie aktualizuje wartości automatycznie, gdy% zmieni się z 66 na 67.Detect Zmiana stanu baterii na każdy procent w Androidzie

Oto mój kod.

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

    } 

pozwolenie Dodany

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

wykryć 66, ale kiedy to się zmieni 65 lub 67 nie będzie aktualizować wartość. lub nie wyświetlaj logu zbyt

Chcę sprawić, aby każdy mógł uzyskać każdą zmianę.

Z góry dziękuję.

Odpowiedz

12

Po pierwsze, nie potrzebujesz uprawnienia BATTERY_STATS.

Po drugie, pierwsza linia twojego onReceive() wyrejestruje Twój BroadcastReceiver, co uniemożliwi otrzymywanie dalszych aktualizacji.

Po trzecie, nie ma gwarancji, że informacje o stanie baterii będą dostarczane za każdą zmianę 1%. Na przykład wiele telefonów Motorola wysyła tylko ACTION_BATTERY_CHANGED co 10%, aż do wyczerpania baterii. Decyzja o tym, jak często należy nadawać ACTION_BATTERY_CHANGED, zależy od producenta urządzenia, a nie od Ciebie.