2012-04-17 10 views
5

Voglio rilevare il cambio della batteria ad ogni percentuale. Sono in grado di rilevare il livello della batteria una volta con il ricevitore di trasmissione. Ma il suo valore non si aggiorna automaticamente quando il% cambia da 66 a 67.Rileva Modifica dello stato della batteria ad ogni percentuale in Android

Ecco il mio codice.

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

    } 

permesso aggiunte

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

Si rileva 66 ma quando cambia 65 o 67 non verrà aggiornato valore. o non visualizzare il registro troppo

Voglio renderlo come posso ottenere ogni cambiamento.

Grazie in anticipo.

risposta

12

Innanzitutto, non è necessaria l'autorizzazione BATTERY_STATS.

In secondo luogo, la prima riga del tuo onReceive() annulla la registrazione del tuo BroadcastReceiver, impedendo così di ottenere ulteriori aggiornamenti.

In terzo luogo, non vi è alcuna garanzia che le informazioni sulla batteria vengano fornite all'utente per ogni cambiamento dell'1%. Molti telefoni Motorola, ad esempio, inviano solo il ACTION_BATTERY_CHANGED ogni 10% finché la batteria non si scarica. La decisione sulla frequenza di trasmissione di ACTION_BATTERY_CHANGED dipende dal produttore del dispositivo, non da te.

Problemi correlati