2014-07-16 223 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

在第五项活动中,我需要拍照。如果电量不足,我需要知道电池状态,如果电量不足,请取消拍摄并按照流程进行。 –