Запустите фоновый код, когда зарядное устройство подключится - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь запустить какой-то код каждый раз, когда зарядное устройство подключается к устройству и приложение закрывается.Единственное, что я обнаружил, - это запланировать работу, которая может выполняться только при подключенном зарядном устройстве, но проблема в том, что код будет выполняться только один раз (если я не перенесу его из), и он будет выполняться только на установленном устройстве.раз.Я хочу, чтобы код запускался немедленно и каждый раз, когда я подключаю зарядное устройство, как широковещательный прослушиватель, но в фоновом режиме.

Возможно ли это или у вас есть другие предложения?

Заранее спасибо!:)

РЕДАКТИРОВАТЬ: Кажется, что вы больше не можете слушать подобные трансляции, если вы используете API уровня 26+ ref

Ответы [ 3 ]

4 голосов
/ 16 апреля 2019

BatteryManager транслирует действие, когда устройство подключено или отключено от питания.Важно получать эти события, даже когда ваше приложение не запущено, особенно потому, что эти события должны влиять на то, как часто вы запускаете свое приложение, чтобы инициировать фоновое обновление, поэтому вы должны зарегистрировать BroadcastReceiver в своем манифесте, чтобы прослушивать оба событияопределение ACTION_POWER_CONNECTED и ACTION_POWER_DISCONNECTED в фильтре намерений.

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

В рамках соответствующей реализации BroadcastReceiver вы можете извлечь текущее состояние и метод зарядки, как описано в предыдущем шаге.

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;

        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
        boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
    }
}

Ссылка: https://developer.android.com/training/monitoring-device-state/battery-monitoring

1 голос
/ 16 апреля 2019

Вы можете использовать JobScheduler и использовать метод setRequiresCharging(boolean requiresCharging) для создаваемого вами JobInfo.Builder.

0 голосов
/ 16 апреля 2019

Продолжайте работу потока в фоновом режиме и используйте этот метод

public static boolean isConnected(Context context) {
    Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB;
}

, если isConnected() возвращает true, затем обновите время.

Ссылка на код

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