web-dev-qa-db-ja.com

phonegap:gpsが有効になっているかどうかを確認する方法

「GPSをオンにしてください」というアラートを表示したいと思います。

Phonegapを使用してGPSステータスを取得するにはどうすればよいですか?

次のコードを使用しましたが、GPSがオフになっているとアラートメッセージが表示されません。代わりに何も起こりません。

<!DOCTYPE html>
  <html>
  <head>
   <title>Device Properties Example</title>

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">

// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// device APIs are available
//
function onDeviceReady() {

   var test= navigator.geolocation.getCurrentPosition(onSuccess, onError);

}

// onSuccess Geolocation
//
function onSuccess(position) {
    var element = document.getElementById('geolocation');
    element.innerHTML = 'Latitude: '           + position.coords.latitude              + '<br />' +
                        'Longitude: '          + position.coords.longitude             + '<br />' +
                        'Altitude: '           + position.coords.altitude              + '<br />' +
                        'Accuracy: '           + position.coords.accuracy              + '<br />' +
                        'Altitude Accuracy: '  + position.coords.altitudeAccuracy      + '<br />' +
                        'Heading: '            + position.coords.heading               + '<br />' +
                        'Speed: '              + position.coords.speed                 + '<br />' +
                        'Timestamp: '          + position.timestamp                    + '<br />';
}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}

</script>
</head>
<body>
  <p id="geolocation">   Finding geolocation...</p>
</body>
</html>
7
user2899728

Androidプラットフォームのみ、 @ Joerg が正しく言うように、 cordova.plugins.diagnostic を使用して確認できますGPSが有効になっている場合 isGpsLocationEnabled()

cordova.plugins.diagnostic.isGpsLocationEnabled(function(enabled){
    console.log("GPS location is " + (enabled ? "enabled" : "disabled"));
}, function(error){
    console.error("The following error occurred: "+error);
});    

その結果、GPSがオフになっている場合は、ユーザーを位置設定ページに切り替えて、手動でGPSを有効にすることができます。

cordova.plugins.diagnostic.switchToLocationSettings();

または、さらに、 cordova-plugin-request-location-accuracy を使用して、アプリ内から直接高精度のロケーションモード(GPSなど)をリクエストすることもできます。これにより、ネイティブの確認ダイアログが表示され、ユーザーが同意すると、GPSが自動的に有効になります。

function onRequestSuccess(success){
    console.log("Successfully requested accuracy: "+success.message);
}

function onRequestFailure(error){
    console.error("Accuracy request failed: error code="+error.code+"; error message="+error.message);
    if(error.code !== cordova.plugins.locationAccuracy.ERROR_USER_DISAGREED){
        if(window.confirm("Failed to automatically set Location Mode to 'High Accuracy'. Would you like to switch to the Location Settings page and do this manually?")){
            cordova.plugins.diagnostic.switchToLocationSettings();
        }
    }
}

cordova.plugins.locationAccuracy.request(onRequestSuccess, onRequestFailure, cordova.plugins.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY);
25
DaveAlden

あなたの質問への答えは以下です。

* gpsが有効になっているかどうかを確認できません*

タイムアウトを設定してタイムアウトを取得できます。timeoutパラメーターを設定することでこれを行うことができます。 geolocationoptions パラメーター。 (使用しなかった)

ドキュメント から

  • timeout:_navigator.geolocation.getCurrentPosition_または_geolocation.watchPosition_への呼び出しから対応するgeolocationSuccessコールバックが実行されます。この時間内にgeolocationSuccessコールバックが呼び出されない場合、geolocationErrorコールバックには_PositionError.TIMEOUT_エラーコードが渡されます。 (_geolocation.watchPosition_と組み合わせて使用​​すると、geolocationErrorコールバックがtimeoutミリ秒ごとの間隔で呼び出される可能性があることに注意してください!)(Number)

私が間違っていたのを待つ

GPSがオンになっているかどうかを確認するプラグインがあります。

実際、複数あります。

2
JesseMonroy650

GPS、Wifi、…が有効になっているかどうかを確認する最良の方法は、次のプラグインを使用することです。

https://www.npmjs.com/package/cordova.plugins.diagnostic

このプラグインを使用すると、多くの機能を確認したり、ユーザーを設定に切り替えたりすることができます。

2
Joerg