2012-11-05 74 views
10

当设备的电池电量不足时,我想关闭我的应用程序。 我在清单中添加了以下代码。如何检测电池电量低时:Android?

<receiver android:name=".BatteryLevelReceiver" 
     <intent-filter> 
      <action android:name="android.intent.action.ACTION_BATTERY_LOW" /> 
      <action android:name="android.intent.action.ACTION_BATTERY_OKAY" /> 
     </intent-filter> 
</receiver> 

而下面的代码在接收器

public class BatteryLevelReceiver extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Toast.makeText(context, "BAttery's dying!!", Toast.LENGTH_LONG).show(); 
     Log.e("", "BATTERY LOW!!"); 
    } 
} 

我正在上emulater应用和改变使用telnet电池电量。 它改变电池电量,但不显示任何烤面包或日志。

我在想什么? 任何帮助表示赞赏! 谢谢。

回答

5

在代码中注册您的接收器,而不是在AndroidManifest文件中注册。

registerReceiver(batteryChangeReceiver, new IntentFilter(
    Intent.ACTION_BATTERY_CHANGED)); // register in activity or service 

public class BatteryChangeReceiver extends BroadcastReceiver { 

    int scale = -1; 
    int level = -1; 
    int voltage = -1; 
    int temp = -1; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     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); 
    } 
} 

unregisterReceiver(batteryChangeReceiver);//unregister in the activity or service 

或者收听空电池的电量。

Intent BATTERYintent = this.registerReceiver(null, new IntentFilter(
     Intent.ACTION_BATTERY_CHANGED)); 
int level = BATTERYintent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
Log.v(null, "LEVEL" + level); 
+0

感谢您的回复。 我试过registerReceiver(myBatteryReceiverLow,新的IntentFilter(Intent.ACTION_BATTERY_LOW)); 但它不是工作压力太大:( – Aadi

+1

你有没有洗过清单,并发送广播动作handly ACTION_BATTERY_LOW =“android.intent.action.BATTERY_LOW”; – Yahor10

+0

我已经打扫清单 但什么是发送广播动作handly意思? 我没有在广播上工作太多..你能帮我吗? – Aadi

33

您可以在AndroidManifest.xml注册您的接收器,但是,应确保您正在筛选的作用是

android.intent.action.BATTERY_LOW

,而不是

android.intent.action.ACTION_BATTERY_LOW

(您在代码中使用过)。

+0

这是绝对正确的。 对我的作品! –

+0

与舱单过于 –

7

k3v是正确的。

文档中实际存在错误。 它具体说使用“android.intent.action.ACTION_BATTERY_LOW”。 但正确的行动,把清单中的“android.intent.action.BATTERY_LOW” 在这里看到:http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

(不能投票K3V的回答了,没有足够的计算器点一样的东西......)

更新:我现在可以并做了 - 投票k3v的回答:-)

+0

注册好了新的文件还提到ACTION_BATTERY_LOW –

+0

作品是,K3v的回答是绝对正确的,应该是公认的答案 –

+0

刚刚与CommonsWare就另一个问题进行了讨论。 htly指出,使用BATTERY_LOW,我们开始引用ACTION_BATTERY_LOW常量的字符串值。需要弄清楚常数不起作用的原因 –

0

也许模拟器不响应BATTERY_LOWBATTERY_OKAY消息。尝试一个真正的Android设备。

相关问题