2

フラッター アプリで歩数計パッケージ バージョン ^1.2.0 を使用しましたが、Samsung A30 などの一部のデバイスでは動作しないことに気付きました。使用したバージョンは権限を必要とせず、OPPO F7 デバイスで動作しました。 (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();
}
4

2 に答える 2

1

許可を確認します。

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;
于 2021-11-28T04:18:21.410 に答える