apache / cordova-plugin-device-orientation

Apache Cordova Device Orientation Plugin
https://cordova.apache.org/
Apache License 2.0
58 stars 83 forks source link

Different value for magneticHeading in iOS and Android #69

Closed Syahrul closed 2 years ago

Syahrul commented 2 years ago

Problem

Different value in iOS and Android. iOS is correct

What is expected to happen?

Same value for both

Information

this.deviceOrientation.watchHeading().subscribe((res: DeviceOrientationCompassHeading) => {
      console.log(res);
});

In iOS the value is

{
  "headingAccuracy": 15.887619972229004,
  "magneticHeading": 15.256682395935059,
  "timestamp": 1653415919642.137,
  "trueHeading": 15.116232872009277
}

and in Android

{
    "magneticHeading": 165.015625,
    "trueHeading": 165.015625,
    "headingAccuracy": 0,
    "timestamp": 1653416203062
}

Both handphone are flat on table side by side

Environment, Platform, Device

Ionic Capacitor 3 Angular 13 Android 10 iOS 15.3.1

Checklist

Syahrul commented 2 years ago

Turns out the issue was coming from the order in AndroidManifest.xml

Previous order

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Current order

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.location.gps" />

Changing the order fix my issue.