GPSやインターネットを使用せずにユーザーの現在地を取得することはできますか?つまり、モバイルネットワークプロバイダーの助けを借りて。
GPSやインターネットを使用せずにユーザーの現在地を取得することはできますか?つまり、モバイルネットワークプロバイダーの助けを借りて。
回答:
あなたがやろうとしているのは、のLocationManager.NETWORK_PROVIDER
代わりにを使用してポジションを取得することですLocationManager.GPS_PROVIDER
。これNETWORK_PROVIDER
は、GSMまたはwifiで解決されます。明らかにwifiがオフの場合、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
あなたが取得することにより、実際に自分で修正を開始することはありません。
これによりプロバイダーが起動する可能性があることに注意してください。ただし、ユーザーが以前に場所を取得したことがある場合は、そうはならないでしょう。ドキュメントはこれについてあまり明確ではありません。
ドキュメントによるとgetLastKnownLocation:
指定されたプロバイダーから取得した最新の既知の位置修正からのデータを示す位置を返します。これは、プロバイダーを起動せずに実行できます。
ここに簡単なスニペットがあります:
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" />
PASSIVE_PROVIDER
、NETWORK_PROVIDER
とGPS_PROVIDER
。
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、携帯電話、またはBluetoothに基づく位置特定技術は、常に更新されている大規模なデータベースの助けを借りて機能します。デバイスはトランスミッターIDをスキャンし、インターネット経由でクエリで送信します Google、Apple、Skyhookなどのサービスに。そのサービスは、既知の場所からの以前のワイヤレス調査に基づく場所で応答します。インターネットにアクセスできない場合は、そのようなデータベースのローカルコピーを用意し、これを最新の状態に保つ必要があります。グローバルに使用する場合、これは非常に非現実的です。
理論的には、モバイルプロバイダーはローカルデータサービスのみを提供し、インターネットへのアクセスは提供せず、モバイルデバイスからのロケーションクエリに応答できます。モバイルプロバイダーはこれを行いません。この種の制限されたデータアクセスに対して料金を支払う必要はありません。あなたがあなたのモバイルプロバイダーを通してデータサービスを持っているなら、あなたはインターネットにアクセスできます。
つまり、LocationManager.NETWORK_PROVIDERまたはandroid.hardware.location.networkを使用して位置を取得するには、インターネットを使用する必要があります。
最新の既知の位置を使用するには、ごく最近GPSまたはインターネットにアクセスできる必要があります。インターネットを使用していたばかりの場合は、位置や設定を調整して、インターネットに再び接続できると考えられます。デバイスにGPSまたはインターネットアクセスがなかった場合、最新の既知の位置機能は役に立ちません。
GPSやインターネットがなければ、次のことができます。
ここでは、GPSとネットワークプロバイダーを使用せずにユーザーの現在位置を取得できます。
1。 Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
Google Maps Geolocation Apiをご覧になりましたか?グーグルマップジオロケーション
これは単純なRestApiです。POSTリクエストが必要なだけで、サービスはメートル単位の精度で位置を返します。
GPSを使わずにスマートフォンを追跡できるようです。
出典:
プライマリ:「PinMe:世界中のスマートフォンユーザーを追跡する」
チームの最終コードへのリンクはまだ見つかりません。私がそうするとき、他の人がそうしなかったら、私は投稿します。