Я пытаюсь запустить какой-то код каждый раз, когда зарядное устройство подключается к устройству и приложение закрывается. Единственное, что я обнаружил, - это запланировать работу, которая может выполняться только при подключенном зарядном устройстве, но проблема в том, что код будет выполняться только один раз (если я не перенесу его из), и он будет выполняться только на установленном устройстве. раз. Я хочу, чтобы код запускался немедленно и каждый раз, когда я подключаю зарядное устройство, как широковещательный слушатель, но в фоновом режиме.
Это возможно или у вас есть другие предложения?
Заранее спасибо! :)
РЕДАКТИРОВАТЬ: Кажется, что вы не можете больше слушать такие трансляции, если вы используете уровень API 26+ ref
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
Вы можете использовать JobScheduler
и использовать метод setRequiresCharging(boolean requiresCharging)
в JobInfo.Builder
вами JobInfo.Builder
.
Продолжайте запускать поток в фоновом режиме и используйте этот метод
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
обновите время.