Ограничение WorkManager (setRequiresCharging) не работает на эмуляторе - PullRequest
0 голосов
/ 14 мая 2019

Я настраиваю OneTimeWorkRequest с ограничением - " setRequiresCharging ", но этот рабочий запрос не вызывает метод doWork, когда я переключаю состояние батареи на зарядку от разрядки.

Эта проблема существует на эмуляторе и прекрасно работает на моем реальном устройстве, поэтому я думаю, что она может работать не на всех устройствах.

public class MainActivity extends AppCompatActivity {

    WorkManager mWorkManager;
    public static final String TAG="MainActivityTag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWorkManager = WorkManager.getInstance();
        setupWorkRequest();
    }

    private void setupWorkRequest() {
        Log.d(TAG, "setupWorkRequest: " + "setting request");
        // Create charging constraint
        Constraints constraints = new Constraints.Builder()
                .setRequiresCharging(true)
                .build();
        OneTimeWorkRequest chargerListen = new OneTimeWorkRequest
                .Builder(ChargerListener.class)
                .setConstraints(constraints)
                .build();
        mWorkManager.enqueue(chargerListen);
    }
}
public class ChargerListener extends Worker {

    private static final String TAG = "ChargerListenerTag";

     public ChargerListenerWork(Context context, WorkerParameters workerParams){
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {
        Log.d(TAG, "doWork: "+"Charger Connected");
        // do some work when connected
        return Result.success();
    }
}

В logcat я ожидаю, что зарядное устройство подключено, оно работает на моем устройстве Samsung, но не работает на эмуляторе Android.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Поведение может зависеть от уровня вашей ОС.На более новых устройствах (API 23 и выше) мы можем выяснить, заряжается ли аккумулятор или разряжается, даже если подключено зарядное устройство.На старых устройствах мы используем наличие того, подключено ли зарядное устройство, чтобы определить, заряжаемся ли мы.

Точное поведение вы можете посмотреть здесь, если вам интересно: https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/work/workmanager/src/main/java/androidx/work/impl/constraints/trackers/BatteryChargingTracker.java

0 голосов
/ 15 мая 2019

Я только что попробовал с примером WorkManager из codelab (используя WorkManager v2.1.x), и он работает, когда я устанавливаю правильную батарею и состояние зарядки на эмуляторе (я использую v29.0.9-5537588):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...