アプリでsencha-touch2.0とphonegap2.0.0を使用して、ユーザーの場所を取得しています。私のlocahostで実行すると、すべてが正常に機能します。ただし、.apkをmy Android 15 apiのデバイス(Eclipseとadtプラグインを使用)にロードする場合、getCurrentLocationまたはwatchPositionを呼び出すたびに戻ることはありません...
これが私のコードです:
geoOn: function(){
var geoReady = navigator.geolocation || undefined;
var onSuccess = function(position){
Top5.app.alert('Geolocation success '+String(position.coords.latitude) + ' ' + String(position.coords.longitude),'Geolocation');
var scope = Ext.getCmp('nestedList');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert('Geolocation failed: '+String(error.code) + ' '+String(error.message),'Geolocation');};
if (geoReady) {
this.watchId = navigator.geolocation.watchPosition(onSuccess ,onFailure,{timeout:6000,maximumAge: 3000,enableHighAccuracy: true});
}
else{
Ext.device.Geolocation.watchPosition({
frequency: 3000, // Update every 3 seconds
callback: function(position) {
this.updateDistance(position.coords);
},
failure: function() {
console.log('Geolocation Failure!');
},
scope:this
});
}
},
geoGet: function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
var onSuccess = function(position){
Top5.app.alert('Geolocation successful!!!');
var scope = Ext.getCmp('nestedList');
scope.updateDistance(position.coords);
};
var onFailure = function(error){Top5.app.alert('Geolocation failed: '+String(error.code) + ' '+String(error.message),'Geolocation');};
navigator.geolocation.getCurrentPosition(onSuccess,onFailure);
}
else{}
},
geoOff:function(){
var geoReady = navigator.geolocation || undefined;
if (geoReady) {
navigator.geolocation.clearWatch(this.watchId);
this.watchId = null;
}
else{
Ext.device.Geolocation.clearWatch();
}
},
updateDistance:function(coords){
Top5.app.alert('updateDist','');
var scope = Ext.getCmp('nestedList');
var lat = coords.latitude,lon = coords.longitude;
var store = scope.getStore();
var i,record;
for(i = 0; i < store.data.all.length; i++)
{
record = store.data.all[i];
if(record.data.locationX){
record.set('distance',Top5.app.getDistance(record.data.locationX,record.data.locationY,lat,lon).toFixed(3));
}
}
}
PDATE:それで、私は自分の建物から出て、それはうまくいきました...私はもっと頻繁に外に出る必要があります。
ただし、gpsを無効にすると、geoLocationはwifi接続を使用して自分の場所を見つけると思いましたが、失敗します(enableHighAccuracy:falseを設定しています)。何故ですか?
PDATE:質問を言い換えます:navigator.geolocation.watchPositionはGPS信号とwifi/g3信号の両方で機能すると想定していますか?インターネット接続のみを使用してユーザーの場所を検出するにはどうすればよいですか?現在、私のコードはGPSでのみ機能しており、そのオプションが無効になっている場合、または信号がブロックされている場合、ジオロケーションは機能しません。
ばかげているように聞こえるかもしれませんが、「ネットワークを使用」オプションを有効にしましたか?
[設定]-> [場所とセキュリティ]-> [ネットワークを使用]に移動します。そしてそれをアクティブにします。私は問題を見て午後中ずっと過ぎました、そしてそれはそれでした。
再起動して再起動しました。電話を工場出荷時の設定にリセットしました。
しかし、何も機能しませんでした。
EnablHighAccuracyをtrueからfalseに設定するまで。
そして...多田....それは動作します。
そう :
var options;
options = {
maximumAge: 30000,
timeout: 5000,
enableHighAccuracy: false
};
これは、PhoneGap2.6.0を使用して正常に機能していました。現在Phonegap3.3を使用しているため、この変更を行う必要がありました。WikoCink+電話でテスト済みです。
エミュレータで実行している場合は、デバイスにジオロケーションが設定されていないことが原因である可能性があります。 Androidエミュレーターがポート5554にあると仮定して、以下を実行して場所を設定してみてください。
telnet localhost 5554
geo fix -0.001 51.5
プロジェクトからPhonegapプラグインジオロケーションプラグインを削除してみてください。デバイスは同じメソッドシグネチャを持つ 標準のHTML5 navigator.geolocation機能 にフォールバックするため、JavaScriptコードに変更を加える必要はありません。
PhoneGap 3.3を使用していると仮定すると、以下を実行する必要があります。
cordova plugin rm org.Apache.cordova.geolocation
私の試行錯誤の分析から、最も可能性が高いのは次のとおりです。1。使用しているAndroidのバージョン。Lollipop以下では、電話の位置設定に移動して、高精度の設定を有効にする必要があります。 (gps、wlan、モバイルネットワークを使用して位置を取得します)KitKat電話でこれを行う必要がありました。2。他の人が述べたように、高精度を有効/無効にし、タイムアウトを追加することで、getCurrentPositionの設定を変更してみてください。3 .ngCordovaを使用している場合は、正しくインストールされており、ロケーション関数が実際に呼び出されていることを確認してください。コンソールを使用して確認してください
PhoneGapを3.5からバージョン3.6.3に更新した後、動作中のアプリでこれが発生しました。他の多くの提案を試した後、アーサーの答えはうまくいきました。 15秒は長すぎるように思えたので、{timeout:2000}を使用しました。同じデバイスで更新する前にコードが正常に機能したため、新しいバージョンの方が遅いと思います。グーグルで見つけたものはすべて初期設定に関するものであり、私の状況とはほとんど関係がないので、私は彼を投稿するだけでなく賛成するつもりでした。
このソリューションを試してください:
window.setInterval(checkPosition, 5000);
function checkPosition() {
function onSuccess(position) {
document.getElementById('result1').innerHTML = position.coords.latitude;
document.getElementById('result2').innerHTML = position.coords.longitude;
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
携帯電話を再起動するか、Googleマップに移動して、GPSがそこで機能しているかどうかを確認します。私はそれを動かしました。
enableHighAccuracy: true, maximumAge: 60000
を追加してからデバイスを再起動を追加するだけです。