1

Androidで単一のGPS修正を取得したい場合は、実際には、LocationManager.GPS_PROVIDERで既知の関数requestSingleUpdate()を使用します。

今、私はGPSをオンにして関数getLocation()でこれを正確に行っていましたが、手動でGPSをオフにしてから再度オンにしない限り、デバイスは自動的に接続を確立しません。ネットワークプロバイダーのrequestSingleUpdate()は問題なく機能しますが、GPSの修正にこれが当てはまらない理由がわかりません。

これが私のソースコードの一部です:

getLocation()は、2分ごとにタイマー付きの別のオブジェクトによって実行されます。getLocation()では、GPSとネットワークがオンの場合、最初の1分間にGPS修正を取得しようとし、ネットワークの位置がない場合は取得します。 GPS修正が利用可能です。

public boolean getLocation() {
    // DEBUG
    Log.d("GPS Connection", "Entering getLocation()");
    gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    if(!gpsEnabled && !networkEnabled)
        return false;

    if(gpsEnabled && networkEnabled) {
        // DEBUG
        Log.d("GPS Connection", "Request GPS Data");
        locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, gpsLocationListener, Looper.getMainLooper());
        gpsGetLocationTimeout = new Timer();
        gpsGetLocationTimeout.schedule(new GetNetworkLocation(), GPS_MAX_CONNECTION_TIME_MS);
    }

    ...
4

1 に答える 1

6

Androidのドキュメントから:

最新の場所を受け取るまでに時間がかかる場合があります。すぐ近くの場所が必要な場合、アプリケーションはgetLastKnownLocation(String)メソッドを使用できます。ユーザーがプロバイダーを無効にした場合、更新は受信されず、onProviderDisabled(String)メソッドが呼び出されます。プロバイダーが再び有効になるとすぐに、onProviderEnabled(String)メソッドが呼び出され、場所の更新が再開されます。

GPSは、コールドスタートから取得するのに長い時間がかかる場合があります。屋内、駐車場、高層ビルに囲まれている、安っぽい電話を持っている、またはGPS衛星の神々がおかしな気分になっている場合は、GPSを取得できない可能性があります。

一部のアプリケーションでは、GPS位置情報をリクエストし、60秒経っても到着しない場合は、GPS RXを半永久的にオンにしたまま携帯電話のバッテリーを停止しないように、リクエストをキャンセルします。

あなたは最後の既知の場所を要求し、その年齢をチェックして、それが使用するのに十分最近のものであるかどうかを決定することができます。ネットワークロケーションは(バッテリーの使用に関して)高速で安価であり、GPSを取得するまでネットワークロケーションを使用することをお勧めします。

AndroidでGPSをコーディングした私の経験では、GPSはやりたいことを実行しますが、これは多くの点で、ドキュメントで期待されていることではありません。GPSは、利用できる場合とできない場合があるものとして扱う必要があり、プログラムのロジックはそれを処理するように設計できます。

于 2012-05-03T14:05:13.117 に答える