3

この質問が以前に尋ねられたことは知っていますが、提案されたすべての解決策を試しましたが、何もうまくいかないようです!

私はPhonegapで構築されたモバイルアプリに取り組んでいます(+Angularですが、それは重要ではないと思います)。このアプリでは、ジオロケーション プラグインを使用しています。より具体的には、config.xml は次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
    <widget xmlns   = "http://www.w3.org/ns/widgets"
        xmlns:gap   = "http://phonegap.com/ns/1.0"
        id          = "......"
        version     = "1.0.0" >

    <name>.....</name>

    <preference name="permissions"                value="none"/>

    <preference name="orientation"                value="default" />
    <preference name="target-device"              value="universal" />
    <preference name="phonegap-version"           value="3.6.3" />

    <gap:plugin name="org.apache.cordova.geolocation" />
    <gap:plugin name="com.phonegap.plugins.PushPlugin" version="2.4.0" />
    <gap:plugin name="org.apache.cordova.network-information" />
    <gap:plugin name="org.apache.cordova.statusbar" />
    <gap:plugin name="org.apache.cordova.device" />
    <gap:plugin name="org.transistorsoft.cordova.background-geolocation"/>
</widget>

ユーザーの現在位置を取得したい場合があるので、以下のようにしています。

navigator.geolocation.getCurrentPosition(function (position) {
    .....
}, function (error) {}, {
    enableHighAccuracy: true,
    maximumAge: 30000,
    timeout: 10000
});

これは iOS デバイスで正常に動作し、Android のリップル エミュレーターでも動作します。

しかし、このアプリを Android で、具体的には Nexus 4 および 5 で実行しようとすると、地理位置情報が機能しないようです。エラーが発生しているわけではありません。運が悪くても位置を取得しようとしているだけです。

ただし、地理位置情報を使用している他のすべてのアプリとブラウザーの地理位置情報は完全に正常に機能しています!

また、Phonegap Build を使用してアプリをビルドしていることにも注意してください。

この問題を解決する方法を知っている人はいますか? 誰かが同じ問題を抱えていましたか?

4

1 に答える 1

0

あなたのコード サンプルから、空のエラー ハンドラがあるときにエラーが発生していないことをどのように知ることができますfunction (error) {}か?

getCurrentPosition()デバイスの位置を 1 回要求します。これが一度だけ呼び出された場合、デバイスの GPS ハードウェアが位置修正を取得する前に、位置タイムアウトが発生する可能性があります。

watchPosition()代わりに、OS が位置情報の更新を受信するたびに成功関数を呼び出すウォッチャーをセットアップするために使用することをお勧めします。必要な位置が 1 つだけの場合は、ウォッチャーをクリアし、必要に応じて、許容できる精度の位置が得られていることを確認できます。

例えば:

var minAccuracyInMetres = 50;

var positionWatcher;

function onDeviceReady(){
    positionWatcher = navigator.geolocation.watchPosition(
      geolocationSuccess,
      geolocationError,
      {maximumAge:0, timeout: 10000, enableHighAccuracy: true});
}

function geolocationSuccess(position){
  // Reject if accuracy is not sufficient
  if(position.coords.accuracy > minAccuracyInMetres){
      return;        
  }

  // Only single position required so clear watcher
  navigator.geolocation.clearWatch(positionWatcher);

  // Do something with the user's location...

}

function geolocationError(error){
  console.warn("Error while retrieving current position. " + 
    "Error code: " + error.code + ",Message: " + error.message);
}

document.addEventListener("deviceready", onDeviceReady, false);
于 2015-04-27T20:42:14.277 に答える