この質問に重複マークを付けないでください。stackoverflowに関する回答はありません。多くの人がIonic 1に対応しています。またはこれらの回答は非推奨であるか、機能していません。 Androidデバイス。
私はstackoverflowでデバイスの現在の位置を取得することについて多くのソリューションを見てきましたが、それらのどれもがAndroidで機能しているようです。
私が試したこと:-
geolocation.getCurrentPosition()
を使用します。これは[〜#〜] ios [〜#〜]およびbrowserで動作しますが、Androidでは動作しません。
this.geolocation.watchPosition()
を使用します。これは[〜#〜] ios [〜#〜]およびbrowserで動作しますが、Androidでは動作しません。
navigator.geolocation.getCurrentPosition()
を使用すると、[〜#〜] ios [〜#〜]およびbrowserで動作しますが、Androidでは動作しません。
この質問によって提供されるフィドルソリューションを使用する getCurrentPosition()およびwatchPosition()は安全でないオリジンで非推奨です
とにかく、これらはすべて非推奨
getCurrentPosition()およびwatchPosition()は、安全でないオリジンでは非推奨であり、サポートは将来削除されます。アプリケーションをHTTPSなどの安全なOriginに切り替えることを検討する必要があります。詳細については、goo.gl/rStTGzを参照してください。
background-geolocation plugin
に基づいていますが、Androidデバイスではほぼ50〜55秒かかりますが、iosでも正常に機能していますjoshmorony( https://www.joshmorony.com/adding-background-geolocation-to-an-ionic-2-application/ )ソリューションの問題は、フォアグラウンドがAndroid物理デバイスですが、ブラウザとiosに対しては正常に動作しています。バックグラウンドトラッキングは正常に動作しています。
これで私を助けてください。最短時間で現在地を取得する方法が必要です。ご参考までに、Google javascriptmap sdk/apiを使用しています。
インターネット上であなたと他の人が提供するすべてのソリューションを試しました。最後に解決策を見つけました。このプラグインを試すことができますcordova-plugin-advanced-geolocation(- https://github.com/Esri/cordova-plugin-advanced-geolocation )from[〜#〜] esri [〜#〜]。ただし、このプラグインはAndroidでは機能しません[〜#〜] ios [〜#〜]。 iOSの場合は、同じ古いアプローチを使用できます。すなわち-this.geolocation.getCurrentPosition(...)
またはthis.geolocation.watchPosition(..)
を使用します。
追加cordova-plugin-advanced-geolocationプラグインこのように:-
cordova plugin add https://github.com/esri/cordova-plugin-advanced-geolocation.git
それから
declare var AdvancedGeolocation:any;
//クラスの先頭
//**For Android**
if (this.platform.is('Android')) {
this.platform.ready().then(() => {
AdvancedGeolocation.start((success) => {
//loading.dismiss();
// this.refreshCurrentUserLocation();
try {
var jsonObject = JSON.parse(success);
console.log("Provider " + JSON.stringify(jsonObject));
switch (jsonObject.provider) {
case "gps":
console.log("setting gps ====<<>>" + jsonObject.latitude);
this.currentLat = jsonObject.latitude;
this.currentLng = jsonObject.longitude;
break;
case "network":
console.log("setting network ====<<>>" + jsonObject.latitude);
this.currentLat = jsonObject.latitude;
this.currentLng = jsonObject.longitude;
break;
case "satellite":
//TODO
break;
case "cell_info":
//TODO
break;
case "cell_location":
//TODO
break;
case "signal_strength":
//TODO
break;
}
}
catch (exc) {
console.log("Invalid JSON: " + exc);
}
},
function (error) {
console.log("ERROR! " + JSON.stringify(error));
},
{
"minTime": 500, // Min time interval between updates (ms)
"minDistance": 1, // Min distance between updates (meters)
"noWarn": true, // Native location provider warnings
"providers": "all", // Return GPS, NETWORK and CELL locations
"useCache": true, // Return GPS and NETWORK cached locations
"satelliteData": false, // Return of GPS satellite info
"buffer": false, // Buffer location data
"bufferSize": 0, // Max elements in buffer
"signalStrength": false // Return cell signal strength data
});
});
} else {
// **For IOS**
let options = {
frequency: 1000,
enableHighAccuracy: false
};
this.watch = this.geolocation.watchPosition(options).filter((p: any) => p.code === undefined).subscribe((position: Geoposition) => {
// loading.dismiss();
console.log("current location at login" + JSON.stringify(position));
// Run update inside of Angular's zone
this.zone.run(() => {
this.currentLat = position.coords.latitude;
this.currentLng = position.coords.longitude;
});
});
}
[〜#〜] edit [〜#〜]:最初のインストールは常にうまくいきます。ただし、その後のインストールで理由なくエラーが発生する場合があります。このエラー(このプラグインのエラー)をなくすには、次の手順を実行します。
1。このプラグインをプロジェクトから削除します(config.xml
およびpackage.json
)。
2。Android
プラットフォームを削除/削除します。
3。plugins
フォルダーを削除します。
4。上記の手順に従って、このプラグインを再インストールします。
私は問題を経験し、解決策を見つけました。
ユーザーの位置情報を取得する最良の方法は、このプラグインを使用することです https://ionicframework.com/docs/native/geolocation/
プロバイダーとしてapp.moudle.tsを追加することを忘れないでください。
アプリコンポーネントにこのコードを追加するだけで、場所を取得できました(constructorにインポートして追加することを忘れないでください)
this.geolocation.getCurrentPosition({ enableHighAccuracy: true }).then((resp) => {
console.log(resp);
}, Error => {
console.log(Error);
}).catch(Error => {
console.log(Error);
})
安全なOriginionic cordova run Android --livereloadを使用しているときにのみ同じエラーが発生します
しかし、ionic serveを使用すると、ブラウザで応答を見ることができ、ionic cordova run Android
Android私はchromeデバッガをチェックします。
同様の問題に遭遇しました。 --prodフラグを使用して端末からビルドすると、httpsを介した位置を要求しているため、このエラーは表示されなくなりました。
編集:フォーマットについては申し訳ありませんが、これがもう少し理にかなっていることを願っています。どこからでも呼び出すことができるサービスで次の関数を使用して、緯度、経度、精度、およびタイムスタンプを取得しました。ただし、重要なのは、アプリをビルドするときにターミナルで--prodフラグを使用することです。
this.geolocation.getCurrentPosition().then(position => {
let locationObj = {
lat: position.coords.latitude,
lon: position.coords.longitude,
timestamp: position.timestamp,
accuracy: position.coords.accuracy
};
resolve(locationObj);
})
このメソッドは、ボットAndroid and browser
watchLocation() {
this.watchLocationUpdates = this.geolocation.watchPosition({ maximumAge: 60000, timeout: 25000, enableHighAccuracy: true })
.subscribe(resp => {
this.latitude = resp.coords.latitude;
this.longitude = resp.coords.longitude;
this.altitude = resp.coords.altitude;
this.accuracy = resp.coords.accuracy;
this.altAccuracy = resp.coords.altitudeAccuracy;
this.heading = resp.coords.heading;
this.speed = resp.coords.speed;
this.timestamp = new Date(resp.timestamp);
});
}