GPSやインターネットを使用せずにユーザーの現在位置を取得することは可能ですか?私はモバイルネットワークプロバイダーの助けを借りて意味します。
あなたがやろうとしているのは、LocationManager.NETWORK_PROVIDER
の代わりにLocationManager.GPS_PROVIDER
を使用してポジションを取得することです。 NETWORK_PROVIDER
は、利用可能なGSMまたはwifiで解決されます。明らかに無線LANをオフにして、GSMが使用されます。セルネットワークの使用は、基本的に500mまで正確であることに注意してください。
http://developer.Android.com/guide/topics/location/obtaining-user-location.html には、本当に素晴らしい情報とサンプルコードがあります。
OnCreate()
のほとんどのコードを完了したら、これを追加します。
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
アクティビティにLocationListener
クラスを実装させ、アクティビティにonLocationChanged()
を実装することもできます。
getLastKnownLocation
を取得することで、実際に自分で修正を開始することはありません。
このcouldはプロバイダーを開始できますが、ユーザーが以前に場所を取得したことがある場合は、そうなるとは思いません。ドキュメントはこれについてあまり明確ではありません。
ドキュメントによると、getLastKnownLocation:
指定されたプロバイダーから取得した最後の既知の位置修正からのデータを示すLocationを返します。これは、プロバイダーを起動せずに実行できます。
これが簡単なスニペットです。
import Android.content.Context;
import Android.location.Location;
import Android.location.LocationManager;
import Java.util.List;
public class UtilLocation {
public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location utilLocation = null;
List<String> providers = manager.getProviders(enabledProvidersOnly);
for(String provider : providers){
utilLocation = manager.getLastKnownLocation(provider);
if(utilLocation != null) return utilLocation;
}
return null;
}
}
また、AndroidManifest.xml
に新しい権限を追加する必要があります
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
ここでは、GPSとネットワークプロバイダーを使用せずにユーザーの現在位置を取得できます。
1 Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
2 . 参照用にここをクリック
boolean gps_enabled = false;
boolean network_enabled = false;
LocationManager lm = (LocationManager) mCtx
.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location net_loc = null, gps_loc = null, finalLoc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gps_loc != null && net_loc != null) {
//smaller the number more accurate result will
if (gps_loc.getAccuracy() > net_loc.getAccuracy())
finalLoc = net_loc;
else
finalLoc = gps_loc;
// I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)
} else {
if (gps_loc != null) {
finalLoc = gps_loc;
} else if (net_loc != null) {
finalLoc = net_loc;
}
}
いいえ、現在、GPSまたはインターネットを使用せずに現在地を取得することはできません。
WiFi、Cellular、またはBluetoothに基づくロケーションテクニックは、常に更新されている大規模なデータベースの助けを借りて機能します。デバイスはトランスミッタIDをスキャンし、クエリで送信しますインターネット経由 Google、Apple、Skyhookなどのサービスに送信します。そのサービスは、既知の場所からの以前のワイヤレス調査に基づいた場所で応答します。インターネットにアクセスできない場合、そのようなデータベースのローカルコピーを保持し、これを最新の状態に保つ必要があります。グローバルに使用する場合、これは非常に実用的ではありません。
理論的には、モバイルプロバイダーはローカルデータサービスのみを提供し、インターネットへのアクセスは提供せず、モバイルデバイスからのロケーションクエリに応答できます。モバイルプロバイダーはこれを行いません。この種類の制限されたデータアクセスに対して支払いを希望する人はいません。モバイルプロバイダーを介したデータサービスがある場合は、インターネットにアクセスできます。
要するに、LocationManager.NETWORK_PROVIDERまたはAndroid.hardware.location.networkを使用して位置を取得するには、インターネットを使用する必要があります。
最後の既知の位置を使用するには、ごく最近にGPSまたはインターネットにアクセスする必要があります。インターネットがあれば、位置や設定を調整して再びインターネットに接続できるでしょう。デバイスにGPSまたはインターネットアクセスがない場合、最後の既知の位置機能は役に立ちません。
GPSまたはインターネットがなければ、次のことができます。
Google Maps Geolocation Apiをご覧になりましたか? Google Map Geolocation
これは単純なRestApiです。必要なのはPOSTリクエストだけで、サービスはメートル単位の精度で位置を返します。
TelephonyManagerを使用してそれを行うことができます。