电池广播接收器不起作用

时间:2011-12-20 22:00:25

标签: java android broadcastreceiver power-management

我不知道为什么,但我的电池广播接收器不起作用。

的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)。

1 个答案:

答案 0 :(得分:7)

有几个问题;我通过降低严重程度大致订购了它们:

  1. 您无法从Manifest注册ACTION_BATTERY_CHANGED;你必须以编程方式注册它。

  2. 请勿使用BATTERY_STATS权限;它完全不相关。

  3. 如果您在同一个BroadcastReceiver中接收多个广播(即使您不是,这通常也是一个好主意),您应该检查您刚收到的广播。 ACTION_BATTERY_LOW的处理方式不应与ACTION_BATTERY_CHANGED相同。 (首先,它没有附加BatteryManager.EXTRA_LEVEL Extra,因此尝试阅读它会为您提供默认值0。)

  4. 您应该使用-1作为默认值,而不是0之类的有效值。

  5. 您应检查是否已收到默认值并进行相应处理。

  6. 您应该使用BatteryManager.EXTRA_LEVEL而不是硬编码“级别”。