广播接收器 - 监控电池电量和充电状态

Gid*_*zin 4 android broadcastreceiver

我想做两个祝酒词:一个是设备正在充电,另一个是不充电的.但接收器表现得很疯狂,发送了许多祝酒词,并且崩溃了应用程序.我找不到问题.日Thnx!这是主要活动中的接收者:

public class PowerConnectionReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                status == BatteryManager.BATTERY_STATUS_FULL;
        if (isCharging){
            Toast.makeText(context, "The device is charging", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(context, "The device is not charging", Toast.LENGTH_SHORT).show();

        }

    }
}
Run Code Online (Sandbox Code Playgroud)

这是显而易见的:

<receiver android:name=".view.MainActivity$PowerConnectionReceiver">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

Gid*_*zin 7

我找到了一种检查设备是否正在充电的好方法.这是接收器类的代码:

public class PowerConnectionReceiver extends BroadcastReceiver {

    public PowerConnectionReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)) {
            Toast.makeText(context, "The device is charging", Toast.LENGTH_SHORT).show();
        } else {
            intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED);
            Toast.makeText(context, "The device is not charging", Toast.LENGTH_SHORT).show();
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

在onResume上注册:

receiver = new PowerConnectionReceiver();

    IntentFilter ifilter = new IntentFilter();
    ifilter.addAction(Intent.ACTION_POWER_CONNECTED);
    ifilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
    registerReceiver(receiver, ifilter);
Run Code Online (Sandbox Code Playgroud)

在onPause上取消注册:

        unregisterReceiver(receiver);
Run Code Online (Sandbox Code Playgroud)

工作良好!