有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android WorkManager在手机充满电时运行任务

我有一个项目,我想在电池充满电时在WorkManager中运行一个任务。我几乎到处找,但找不到任何解决办法

@NonNull
@Override
public Result doWork() {

    //I want to run this task when battery is full.

    if(BatteryManager.BATTERY_STATUS_CHARGING==100) {
          showNotification();
    }

    return Result.success();
}

以及启动WorkManager的代码片段:

private void startWorkManager() {


    Constraints constraints = new Constraints.Builder()
        .setRequiresBatteryNotLow(true)
        .setRequiresCharging(true)
        .build();

    PeriodicWorkRequest periodicWorkRequest= new
            PeriodicWorkRequest.Builder(NotificationWork.class 
    ,15,TimeUnit.MINUTES)
            .setConstraints(constraints)
            .build();

    WorkManager.getInstance().enqueue(periodicWorkRequest);
}

更新承包商

公共通知工作(@NonNull上下文,@NonNull WorkerParameters workerParams){ 超级(上下文、工作参数); 这语境=语境

}

public double batteryLevel(Context context){

    Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int rawlevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    double scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
    double level = -1;
    if (rawlevel >= 0 && scale > 0) {
        level = rawlevel / scale;
    }
    return level;    //This will return the value in range of 0.0-1.0
}


@NonNull
@Override
public Result doWork() {

    if (batteryLevel(context) == 1.0) {  //1.0 means 100%

      showNotification();

        return Result.success();
    } else {
          return Result.retry();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    首先,在worker类中,创建一个batteryLevel(Context context)函数来获取电池电量

    public double batteryLevel(Context context){
    
        Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        int rawlevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        double scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        double level = -1;
        if (rawlevel >= 0 && scale > 0) {
            level = rawlevel / scale;
        }
        return level;    //This will return the value in range of 0.0-1.0
    }
    

    然后在doWork()方法中,检查电池电量,如果是100%:

    if (batteryLevel(context) == 1.0){  //1.0 means 100%
        //Do your stuff
        return Result.success()
    }else{
        return Result.retry()
    }
    

    更新 创建类级上下文对象

    Context context;
    

    使用以下参数初始化构造函数

    public NotificationWork(@NonNull Context context, @NonNull WorkerParameters workerParams){
        super(context,workParams);
        this.context = context;
    }