В настоящее время я пытаюсь создать приложение, которое выполняет следующее:
1) При подключении к источнику питания не разрешайте устройству переходить в спящий режим 2) При отключении от питания разрешайте устройству переходить в спящий режим
В настоящее время я использую плагин «Аккумулятор», чтобы определить, идет ли речь о устройстве или нет. Использую is.
https://pub.dev/packages/wakelock
Код для этого:
class _MyHomePageState extends State<MyHomePage> {
Battery _battery = Battery();
bool wakeLockEnabled;
BatteryState _batteryState;
StreamSubscription<BatteryState> _batteryStateSubscription;
Color bgColor = Colors.white;
@override
void initState() {
super.initState();
_batteryStateSubscription =
_battery.onBatteryStateChanged.listen((BatteryState state) {
setState(() {
_batteryState = state;
_shouldWakelock();
});
});
}
void _shouldWakelock() async {
wakeLockEnabled = await Wakelock.isEnabled;
if (_batteryState == BatteryState.charging) {
if (!wakeLockEnabled) {
setState(() {
Wakelock.enable();
bgColor = Colors.green;
});
}
} else if (_batteryState == BatteryState.discharging) {
if (wakeLockEnabled) {
setState(() {
Wakelock.disable();
bgColor = Colors.red;
});
}
} else if (_batteryState == BatteryState.full) {
setState(() {
Wakelock.disable();
bgColor = Colors.yellow;
});
}
wakeLockEnabled = await Wakelock.isEnabled;
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('$_batteryState'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: 100,
height: 100,
color: bgColor,
),
Text('$wakeLockEnabled'),
],
),
),
);
}
@override
void dispose() {
super.dispose();
if (_batteryStateSubscription != null) {
_batteryStateSubscription.cancel();
}
}
}
В настоящее время следующие тесты дают следующие результаты (это все с использованием iPhone 7)
Устройство подключено к Mac, и приложение запускается через IntelliJ, когда приложение полностью запустилось, устройство не переходит в спящий режим, устройство затемотключено во время работы приложения и примерно через 30 секунд устройство переходит в спящий режим.
Устройство подключено к источнику питания, и приложение запускается с экрана устройства, устройство никогда не переходит в спящий режим, при отключении питания устройство по-прежнему не переходит в спящий режим.
Приложение запускается через само устройство, устройство не подключено к источнику питания, устройство не переходит в спящий режим.
Приложение запускаетсячерез само устройство, устройство не подключено к источнику питания, устройство не переходит в спящий режим, при подключении кабеля питания и последующем его отключении примерно через 10 секунд функция пробуждения по-прежнему не активируется и по-прежнему не переходит в спящий режим.
Я сделал новый проект, в котором я оставил всю плиту котла и просто добавил это в функцию _incrementCounter (). (Я также сделал это асинхронно. Здесь всякий раз, когда я нажимаю кнопку для переключения между включением и отключением wakelock, он работает просто отлично, только когда wakelock реагирует на смену батареи, он почему-то не работает.
var isEnabled = await Wakelock.isEnabled;
if (isEnabled) {
await Wakelock.disable();
} else {
await Wakelock.enable();
}
Надеюсь, кто-то знает, что может быть причиной странного поведения.