我不知道为什么,但我的电池广播接收器不起作用。
的AndroidManifest.xml
<receiver android:name=".BatteryReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_CHANGED" />
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
BatteryReceiver.java
public class BatteryReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
int level = intent.getIntExtra( "level", 0 );
Log.d("Battery", "level: "+level);
Toast.makeText(context, "Battery low!", Toast.LENGTH_LONG).show();
}
}
我的代码出了什么问题? 我正在使用控制台(telnet)来改变电池电量(电源容量X)。
答案 0 :(得分:7)
有几个问题;我通过降低严重程度大致订购了它们:
您无法从Manifest注册ACTION_BATTERY_CHANGED
;你必须以编程方式注册它。
请勿使用BATTERY_STATS
权限;它完全不相关。
如果您在同一个BroadcastReceiver中接收多个广播(即使您不是,这通常也是一个好主意),您应该检查您刚收到的广播。 ACTION_BATTERY_LOW
的处理方式不应与ACTION_BATTERY_CHANGED
相同。 (首先,它没有附加BatteryManager.EXTRA_LEVEL
Extra,因此尝试阅读它会为您提供默认值0
。)
您应该使用-1
作为默认值,而不是0
之类的有效值。
您应检查是否已收到默认值并进行相应处理。
您应该使用BatteryManager.EXTRA_LEVEL
而不是硬编码“级别”。