web-dev-qa-db-ja.com

ネイティブのnavigator.geolocation.getCurrentPositionが機能しないという反応

実際のAndroidデバイス(バージョン5.1)を使用しています

React-native-maps(アプリ内のマップ上の正しいブルーポイントの位置)を使用して位置を特定できます+ Googleマップアプリを使用して自分の位置に移動できます(GPSが機能します)。

私は大きなタイムアウトを使用し、enableHighAccuracyをtrueとfalseに切り替え、オプションを削除します...など。すべてがデータを取得するためのnavigator.geolocationの取得に失敗しました。

ここに私のコードがあります:

_var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

function success(pos) {
  var crd = pos.coords;

  console.log('Your current position is:');
  console.log(`Latitude : ${crd.latitude}`);
  console.log(`Longitude: ${crd.longitude}`);
  console.log(`More or less ${crd.accuracy} meters.`);
};

function error(err) {
  console.warn(`ERROR(${err.code}): ${err.message}`);
};

navigator.geolocation.getCurrentPosition(success, error, options);
_

私は取得しています:ERROR(3): Location request timed out

8
Badis Merabet

2つのこと。

1)座標がキャッシュされていない場合、これは実際には高精度の応答の高タイムアウトではありません。2)一部のデバイスには、高精度設定に問題があります。

タイムアウトとして30000ミリ秒を入れて、有効な設定が見つかるまで高精度を削除してください。

編集:私が覚えていた長いバグを見つけましたReact Native: https://github.com/facebook/react-native/issues/7495

だから、これを試してください:

1)maximumAgeプロパティを削除します2)それが機能しない場合は、3番目のパラメーターを削除し、ネイティブモジュールのデフォルト値を使用します。つまり、オプションオブジェクトを送信しないでください。うまくいくはずです。

6
sfratini

MaximumAgeを削除すると、ここで問題が解決しました! 2019年に誰かがまだこの問題を抱えている場合に備えて

2
Marlon Englemam

場所へのアクセスをリクエストするには、アプリのAndroidManifest.xmlに次の行を追加する必要があります:<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />

Android with API> = 2の場合、確認するために追加の手順が必要です。PermissionsAndroid APIを使用してACCESS_FINE_LOCATION権限を要求する必要があります。

PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        title: "Location Accessing Permission",
        message: "App needs access to your location"
      }
    );

そしてその後、navigator.geolocation.getCurrentPosition(success, error, options);を実行します

1
David

私はこれを使用し、うまく動作します:{enableHighAccuracy:false、timeout:50000}

async watchPosition() {
    console.log('watchPosition');        
    await navigator.geolocation.getCurrentPosition(
        (position) => {
          console.log('Position -> ',position);
        },
        (error) => console.log(error)
        {enableHighAccuracy: false, timeout: 50000}
    );
}
1
Johnmark Hugo