android獲取電池電量(無延遲)

傳統的註冊BroadcatsReceiver監聽Battery_changed有個缺陷,就是隻有等到初始化和電量改變時,才能夠收到通知,以下方法可以快速獲得電量,直接拷貝的。

之前寫過一個桌面電池小控件,記得獲取電池信息使用BroadcastReceiver實現的,通常是在一個Service裏面,動態註冊一個BroadcastReceiver,用以監聽電池的電量信息。有時候,僅需要一次性的獲取電池電量信息,之前也是這麼做的,也即這個監控電池電量的BroadcastReceiver在剛註冊的時候,會立即獲取一次電池的信息,但是感覺這樣獲取不大好,於是就又Google了一下,結果在StackOverFlow上找到了一個完美的獲取電池電量的方法,雖然也是基於BroadcastReceiver,但是簡單了不少。

用下面的代碼就可以獲取到攜帶電池信息的Intent了,相當於註冊了一個空的BroadcastReceiver。

[java] view plaincopy
  1. Intent batteryInfoIntent = context.getApplicationContext()  
  2.                 .registerReceiver( null ,  
  3.                         new IntentFilter( Intent.ACTION_BATTERY_CHANGED ) ) ;  


當然,context.getApplicationContext()不是一定要這樣寫的,只要在能動態註冊BroadcastReceiver的地方registerReceiver( null , new IntentFilter( Intent.ACTION_BATTERY_CHANGED ) )就好。

接下來的信息的獲取就簡單了,各個字段的含義如果不明白請到Android Developers上看:

[java] view plaincopy
  1. int status = batteryInfoIntent.getIntExtra( "status" , 0 );  
  2. int health = batteryInfoIntent.getIntExtra( "health" , 1 );  
  3. boolean present = batteryInfoIntent.getBooleanExtra( "present" , false );  
  4. int level = batteryInfoIntent.getIntExtra( "level" , 0 );  
  5. int scale = batteryInfoIntent.getIntExtra( "scale" , 0 );  
  6. int plugged = batteryInfoIntent.getIntExtra( "plugged" , 0 );  
  7. int voltage = batteryInfoIntent.getIntExtra( "voltage" , 0 );  
  8. int temperature = batteryInfoIntent.getIntExtra( "temperature" , 0 ); // 溫度的單位是10℃  
  9. String technology = batteryInfoIntent.getStringExtra( "technology" );  

這樣,想什麼時候獲取就什麼時候獲取,想獲取幾次就獲取幾次。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章