2013-02-11 58 views
3

我試圖閱讀,當我重複報警廣播叫我有以下安裝了Android電池的狀態:的Android BatteryManager只返回1

public class RepeatingAlarm extends BroadcastReceiver { 

    @Override  
    public void onReceive(Context context, Intent intent) 
    { 

      // Acquire the make of the device 
      final String PhoneModel = android.os.Build.MODEL; 
      final String AndroidVersion = android.os.Build.VERSION.RELEASE; 

      // Grab the battery information 
      int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
      int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
      final float batteryPct = level/(float)scale; 
    } 

} 

但我不明白爲什麼它返回了batteryPct = 1。有什麼我在這裏失蹤?我添加了基於android谷歌頁面的正確權限,但這似乎沒有幫助。

回答

9

你得到-1兩個levelscale。 這是因爲您可能試圖在清單中廣播ACTION_BATTERY_CHANGED

ACTION_BATTERY_CHANGED是一個粘性意圖,你不能在清單中註冊一個接收器。請嘗試以下

Intent i = new ContextWrapper(applicationContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
// now you can get the level and scale from this intent variable 
int level = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
int scale = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

float battPct = level/(float)scale; 

你不會NEET到設備接收這個意圖,只是用上述方式,徘徊無論你想使用它。

+0

非常好,非常感謝!我必須對Intent i行進行一些細微的更改,因爲它會導致錯誤(「組件不允許註冊以接收意圖」)。但現在都好。 – eWizardII 2013-02-11 03:39:41

+0

謝謝你的這段代碼。只是浪費了2-3個小時才發現,爲什麼我沒有收到關於廣播接收機上的電池信息,這些信息是在清單上聲明的。 – Javidan 2014-09-21 13:16:16

2

你可能會得到-1兩個levelscale變量(您指定的默認值),所以嘗試打印他們的價值觀,以確保該intent具有正確設置這些值。

你應該聽ACTION_BATTERY_CHANGEDget battery level in Android