Description
What is your question?
I listen magnetometerEventStream to get magnetic values of the device in x, y, z directions. However, when I executed in Android and iOS devices which are oriented in almost same attitude, they reported very different values of MagnetometerEvent as shown below.
Android:
I/flutter (30017): [MagnetometerEvent (x: 7.65749979019165, y: 17.76624870300293, z: 17.66499900817871)]
iOS:
flutter: [MagnetometerEvent (x: 192.7864227294922, y: 8.718887329101562, z: -91.60765075683594)]
My code snippet is:
void listenMagnetometerEvent() {
_magnetometerEventStream ??= magnetometerEventStream().listen(
(MagnetometerEvent event) {
_magnetometerEventNotifier.value = event;
print(event);
},
onError: (error) {
_magnetometerEventStream = null;
throw Exception('Listen magnetometer event error: $error');
},
cancelOnError: true,
);
}
Checklist before submitting a question
- I searched issues in this repository and couldn't find such bug/problemI Google'd a solution and I couldn't find itI searched on StackOverflow for a solution and I couldn't find itI read the README.md file of the pluginI am using the latest version of the pluginAll dependencies are up to date with
flutter pub upgrade
I did aflutter clean
I tried running the example project
Activity
Silverviql commentedon Mar 29, 2024
There was already a similar problem, they apparently never fixed it #781
you can try using https://pub.dev/packages/motion_sensors or dchs_motion_sensors,
they seem to write that it gives the correct values
Zabadam commentedon Mar 29, 2024
Without follow-up, I was unsure if the issue was ever resolved until now.
It seems still the discrepancy is caused by the source of the magnetometer data.
motion_sensors
usesmotionManager.startDeviceMotionUpdates()
andsensors_plus
calls_motionManager.startMagnetometerUpdates()
.I do not have an iOS device to test, but perhaps you could try modifying the local package's code to use
startDeviceMotionUpdates()
and see if that resolves the issue. I never was able to do this myself, and I've needed someone else to try this.Silverviql commentedon Mar 30, 2024
@Zabadam can you roll out an update so that I don’t have to rewrite the implementation in the project using motion_sensors? ))))
I don't know Swift took sample code from https://github.com/zesage/motion_sensors/blob/6dafc3639b3e96460fabc639768a60b431b53610/ios/Classes/SwiftMotionSensorsPlugin.swift#L146
It turned out like this and now the data looks correct
`class FPPMagnetometerStreamHandlerPlus: NSObject, MotionStreamHandler {
}`
I am attaching a screen recording with the values
IMG_0059.MP4
Zabadam commentedon Mar 30, 2024
Me neither, ha! It looks like you were able to accomplish just what I was looking for anyway, because...
in the final portion of the video, you are using our
sensors_plus
but withstartDeviceMotionUpdates()
manually coded in place ofstartMagnetometerUpdates()
, correct?If yes, then a PR could be made where the function call is simply swapped out.
Edit: And the
field
is accessed from the event'smagneticField
, which you correctly caught your code above.(Or is the final part of the video a demonstration of your app with the package replaced entirely be
motion_sensors
?)Edit:
Just now I have realized what happened.
In the past, I did indeed make a follow-up PR that swapped out the "magnetometer updates" call for a "device motion updates" call.
For that fix, I never did receive confirmation of corrected behavior, but it was merged anyway (as some other sensor functions were already utilizing device motion and it seemed appropriate to implement).
When this package was updated to Swift, the revised usage of the device motion sensor was somehow reverted back to utilizing the raw magnetometer sensor.
miquelbeltran commentedon Mar 30, 2024
Hi Zabadam, if you want to resubmit those changes in a PR, I can give some assistance reviewing and merging the fixes.
Silverviql commentedon Mar 30, 2024
yes I posted what code I entered manually
I didn’t use motion_sensors, I took a look at how it was implemented and modified it to fit your code
Silverviql commentedon Apr 3, 2024
@Zabadam Haven't you updated yet?
franz-velasco commentedon May 20, 2024
Is there an update regarding this? Thanks!
Zabadam commentedon Jun 3, 2024
Hello, all, sorry for delay. A PR with this fix should be made shortly.
Zabadam commentedon Jun 3, 2024
@franz-velasco @Silverviql @Hung-Hsun
It would be very helpful if someone could confirm proper functionality now that
DeviceMotion
is in use:Silverviql commentedon Jun 5, 2024
@Zabadam yes it works correctly, the same line needs to be changed there, I dropped a couple above
github-actions commentedon Sep 4, 2024
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 15 days