我尝试验证简单的任务=>持续振动时,设备是水平的(用户坐下来),目前它的工作时,屏幕关闭,只有当设备连接到笔记本电脑或U盘充电器。我尝试了workmanager和android_alarm_manager,但我也遇到了同样的问题。我做错了什么吗?或者这是不可能的?
这是一个简单的复制代码,当设备连接和未连接时,可以在后台测试计时器和振动。
import 'package:android_alarm_manager/android_alarm_manager.dart';
import 'package:flutter/material.dart';
import 'package:vibration/vibration.dart';
import 'dart:async';
main() async {
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Timer _timer;
test_vibration() {
_timer= Timer.periodic(const Duration(seconds: 1), (timer) {
Vibration.vibrate();
});
}
@override
void initState() {
// TODO: implement initState
super.initState();
AndroidAlarmManager.periodic(Duration(seconds: 1), 0, test_vibration());
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center()
),
);
}
}下面是更完整的加速度计示例
import 'package:sensors/sensors.dart';
import 'package:android_alarm_manager/android_alarm_manager.dart';
import 'package:flutter/material.dart';
import 'package:vibration/vibration.dart';
import 'dart:async';
main() async {
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<double> _accelerometerValues;
List<StreamSubscription<dynamic>> _streamSubscriptions =
<StreamSubscription<dynamic>>[];
test_vibration() {
_streamSubscriptions.add(accelerometerEvents.listen((AccelerometerEvent event) { // Stream accelerometre
_accelerometerValues = <double>[event.y]; read accelerometer y
if (event.y>6.0||event.y<-6.0){ //device vertical
}else{ // device horizontal
Vibration.vibrate();
}
}));
}
@override
void initState() {
// TODO: implement initState
super.initState();
_streamSubscriptions.add(accelerometerEvents.listen((AccelerometerEvent event) {
setState(() {
_accelerometerValues = <double>[event.y];
});
AndroidAlarmManager.periodic(Duration(seconds: 1), 0, test_vibration());
}));
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center()
),
);
}
}发布于 2021-04-23 16:28:08
我找到的解决方案:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
https://stackoverflow.com/questions/67211602
复制相似问题