如果设备正在充电且电池电量已满,如何启动活动?

时间:2018-05-08 11:43:54

标签: android android-broadcastreceiver

当设备正在充电且电池电量达到100%(或接近它,让我们说高于95%)时,我需要开始一项活动。应用程序正在打开或关闭。

当充电器插入并检查电池电量时,我可以触发广播接收器,但如果它不在我想要的范围内,则不会发生任何事情。但就我而言,这是我的意思。我不知道如何继续监控它,直到达到所需的电池水平而不在某个活动上运行任务。我需要在背景上发生这种情况。

2 个答案:

答案 0 :(得分:0)

使用此方法检查设备是否正在充电

public static boolean isCharging(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        BatteryManager batteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE);
        return batteryManager.isCharging();
    } else {
        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent intent = context.registerReceiver(null, filter);
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        if (status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL) {
            return true;
        }
    }
    return false;
}

使用此方法获取电池百分比

public static int getBatteryPercentage(Context context) {

    IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    Intent batteryStatus = context.registerReceiver(null, iFilter);

    int level = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) : -1;
    int scale = batteryStatus != null ? batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1) : -1;

    float batteryPct = level / (float) scale;

    return (int) (batteryPct * 100);
}

然后检查

if(isCharging(getContext()) && getBatteryPercentage(getContext()) == 100){
//start your activity here
}

答案 1 :(得分:0)

您可以使用Firebase作业调度程序,在代码中可以指定一些约束,例如计费或网络状态。查看链接https://github.com/firebase/firebase-jobdispatcher-android#scheduling-a-more-complex-job