2014-07-16 224 views
2

我試圖獲取電池狀態。我用這個代碼:獲取電池電量

public class BatteryLevelReceiver extends BroadcastReceiver { 
SharedPreferences prefs; 
int scale = -1; 
int level = -1; 

@Override 
public void onReceive(Context context, Intent intent) { 
    prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
    // temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
    // voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
    float nivel = level/(float) scale; 
    Log.e("level",level+""); 
    Log.e("scale",scale+""); 
    Log.e("batteryLevel",nivel+""); 
} 
在AndroidManifest.xml

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

<receiver android:name="com.spg.receiver.BatteryLevelReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BATTERY_LOW" /> 
      <action android:name="android.intent.action.BATTERY_OKAY" /> 
     </intent-filter> 
    </receiver> 

與該代碼,我與那些線程有:

Get battery level and state in Android

BatteryManager stats not working on Android

但每次,級別和規模都有-1。

我不知道我錯過了什麼?

+0

還有一些關於此的其他帖子...嘗試將'0'而不是'-1'作爲level的第二個參數= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,-1); –

+0

嗯實際上第二個參數是默認值,所以它會很有趣,看看它是什麼日誌,0或-1 ...然後至少你會知道意圖是否被正確觸發 –

+0

我改變它爲0,現在,它總是讓我0,所以它進入廣播 –

回答

2

BatteryManager提供了ACTION_BATTERY_CHANGEDIntentBATTERY_LOWBATTERY_OKAY常數。另外ACTION_BATTERY_CHANGED必須以編程方式註冊,您可以在onCreate中進行註冊。由於BroadcastReceiver無法接收,因此請確保您不需要使用Service,例如您需要在啓動時接收電池事件。

+0

我不明白你的答案的最後一部分,但我不能在官方文檔中找到。你能告訴我更多嗎? –

+0

我不知道你什麼時候需要接收這個'Intent',所以我建議你可能需要重新考慮使用'BroadcastReceiver',因爲你不能依賴'Android IntentFilter'來啓動'BroadcastReceiever'。 –

+0

在第五項活動中,我需要拍照。如果電量不足,我需要知道電池狀態,如果電量不足,請取消拍攝並按照流程進行。 –