【问题标题】:Pedometer package in flutter doesn't work with some devices颤振中的计步器包不适用于某些设备
【发布时间】:2021-01-26 15:54:27
【问题描述】:

我在我的 Flutter 应用程序中使用了计步器包版本 ^1.2.0,我注意到它不适用于三星 A30 等一些设备,我使用的版本不需要任何权限,它在我的设备 OPPO F7 (Used Android 10) 那么有什么问题呢?

这是代码

StreamSubscription<int> _subscription;
Box<int> stepsBox = Hive.box('steps');
int todaySteps;

@override
void initState() {
 super.initState();
 startListening();
}

@override
void dispose() {
 stopListening();
 super.dispose();
}

void startListening() {
_pedometer = Pedometer();
_subscription = _pedometer.pedometerStream.listen(
  getTodaySteps,
  onError: _onError,
  onDone: _onDone,
  cancelOnError: true,
);
}

void _onDone() => print("Finished pedometer tracking");
void _onError(error) => print("Flutter Pedometer Error: $error");

Future<int> getTodaySteps(int value) async {
print(value);
int savedStepsCountKey = 999999;
int savedStepsCount = stepsBox.get(savedStepsCountKey, defaultValue: 0);

int todayDayNo = Jiffy(DateTime.now()).dayOfYear;
if (value < savedStepsCount) {
  // Upon device reboot, pedometer resets. When this happens, the saved counter must be reset as well.
  savedStepsCount = 0;
  // persist this value using a package of your choice here
  stepsBox.put(savedStepsCountKey, savedStepsCount);
}

// load the last day saved using a package of your choice here
int lastDaySavedKey = 888888;
int lastDaySaved = stepsBox.get(lastDaySavedKey, defaultValue: 0);

// When the day changes, reset the daily steps count
// and Update the last day saved as the day changes.
if (lastDaySaved < todayDayNo) {
  lastDaySaved = todayDayNo;
  savedStepsCount = value;

  stepsBox
    ..put(lastDaySavedKey, lastDaySaved)
    ..put(savedStepsCountKey, savedStepsCount);
}

setState(() {
  todaySteps = value - savedStepsCount;
});
stepsBox.put(todayDayNo, todaySteps);
return todaySteps; // this is your daily steps value.
}

void stopListening() {
 _subscription.cancel();
}

【问题讨论】:

    标签: flutter pedometer


    【解决方案1】:

    我认为在这种情况下,最好直接在 lib 存储库中提出问题,针对您的问题提出问题。 https://github.com/cph-cachet/flutter-plugins/issues

    【讨论】:

      【解决方案2】:

      检查权限。

      await Permission.activityRecognition.request().isGranted
      

      这将检查权限并在不允许时请求权限

      if (await Permission.activityRecognition.request().isGranted) {
        _pedestrianStatusStream = Pedometer.pedestrianStatusStream;
        _pedestrianStatusStream
            .listen(onPedestrianStatusChanged)
            .onError(onPedestrianStatusError);
      
        _stepCountStream = Pedometer.stepCountStream;
        _stepCountStream.listen(onStepCount).onError(onStepCountError);
      }else{
        
      }
      if (!mounted) return;
      

      【讨论】:

      • 你知道如何在 Flutter 中检查这个吗?
      • flutter 的实现,只需要添加 permission_handler 包
      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2012-10-26
      • 1970-01-01
      • 2020-10-04
      • 2016-10-11
      相关资源
      最近更新 更多