电池广播接收器不起作用

Zie*_*iem 0 java android power-management broadcastreceiver

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

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>
Run Code Online (Sandbox Code Playgroud)

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();      
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?我正在使用控制台(telnet)来改变电池电量(电源容量X).

Dar*_*tle 8

有几个问题; 我通过降低严重程度粗略地命令它们:

  1. 你不能ACTION_BATTERY_CHANGED从你的清单注册; 你必须以编程方式注册它.

  2. 不要使用BATTERY_STATS许可; 它完全不相关.

  3. 如果您在同一个BroadcastReceiver中接收多个广播(即使您不是,这通常也是一个好主意),您应该检查您刚收到的广播. ACTION_BATTERY_LOW不应该以同样的方式对待ACTION_BATTERY_CHANGED.(首先,它没有BatteryManager.EXTRA_LEVELExtra附加到它,所以尝试阅读它会给你你的默认值,0.)

  4. 您应该使用-1默认值,而不是有效值0.

  5. 您应该检查是否已收到默认值并正确处理.

  6. 你应该使用BatteryManager.EXTRA_LEVEL而不是硬编码"级别".