6

Androidで現在の正確な位置座標を取得したい。モバイルがWifiインターネット接続に接続されている場合は場所を取得できますが、他の場所に行ってインターネット接続が利用できない場合は、現在の場所の座標を取得できません. 代わりに、最後の位置座標を提供します。

例えば:

現在、私は都市 A にいて、wifi 接続で現在の座標を取得し、都市 B に移動すると、現在の座標を取得できません。これの代わりに、最後の位置座標を提供します。

インターネットに接続せずに現在地を取得する方法を教えてください。

public Location getLocation() {
    try {
        locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);

        // getting GPS status
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
        } else {
            this.canGetLocation = true;
            // First get location from Network Provider
            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }

            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}

/**
 * Stop using GPS listener
 * Calling this function will stop using GPS in your app
 * */
public void stopUsingGPS(){
    if(locationManager != null){
        locationManager.removeUpdates(GetLocations.this);
    }
}

/**
 * Function to get latitude
 * */
public double getLatitude(){
    if(location != null){
        latitude = location.getLatitude();
    }
    return latitude;
}

/**
 * Function to get longitude
 * */
public double getLongitude(){
    if(location != null){
        longitude = location.getLongitude();
    }
    return longitude;
}
4

2 に答える 2

3

あなたが示したコードはgetLocation、あなたのクラスのメソッドです。おそらくあなたのクラスも を実装していLocationListenerますよね?requestLocationUpdates(「this」をリスナーとして割り当てているため、それを見ずに行うと仮定します。)

プロバイダーを介した位置情報の更新は非同期であるため、お見せしたメソッドは LAST KNOWN 位置情報のみを返します。リスナーを登録して位置情報を取得したいことを示し、そのリスナーは定期的に更新を取得します (指定した設定に基づいて、実際のデバイスの機能と状況に基づいて)。登録後すぐに場所を取得することはできません。

ネットワークに接続していないときに位置情報を取得するという質問の場合、GPS プロバイダーを使用する必要があります (データ ネットワークに接続していなくても機能します)。GPS プロバイダー リスナーを登録すると (既に登録済みのように)、リスナーのコールバックを介して位置情報が更新されますonLocationChanged(Location location)

コールバックは何をしますonLocationChangedか?

これは、GPS プロバイダーを登録してから数秒から数分で更新された位置情報を取得する場所です (使用しているデバイスのハードウェアと環境条件に応じて、GPS は複数の衛星を使用し、クリアな状態でより高速に動作します)。屋内にいる場合や信号が遮られている場合は、まったく機能しない場合があります)。

リスナーが更新された位置情報を取得するのを待つことに加えて、いくつかの単純な別の方法を使用して、最後の既知の位置を取得し、最適なプロバイダーに登録することを検討することもできます。いくつかの単純なループと、Criteria興味のあるもの (COARSE と FINE、LOW_POWER かどうかなど) を使用できます。

Android 開発者は、ドキュメント、「Protips for Location」オープン ソース サンプル アプリ、および「Deep Dive」ブログ投稿 (その中の他のすべてのリソースへのリンクを含む) でこれを十分に文書化しています: http://android -developers.blogspot.com/2011/06/deep-dive-into-location.html .

于 2013-03-03T23:42:49.360 に答える
-2

インターネットと GPS がなくても、GSM (セル ネットワーク) に基づいて位置を取得できます。

NETWORK_PROVIDER は、GSM または wifi のうち利用可能な方で解決されます。もちろん、wifi をオフにすると、GSM が使用されます。ただし、セル ネットワークの精度は 500m から 2000M までさまざまです。

于 2013-03-04T09:12:21.877 に答える