0

GPS_Provider を使用して、ユーザーの現在の場所を取得するための主要な方法にしたいと考えていますが、場合によっては GPS が機能しません。アプリが GPS でユーザーの位置を取得できない場合は、NETWORK_PROVIDER に切り替えたいと思います。どうすればこれを実装できますか?

lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

//setting up criteria (biased toward GPS)
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
String providerName = lm.getBestProvider(criteria, true);

//requesting location updates (if app cant use GPS, switch to requestLocationUpdates.NETWORK_PROVIDER)
lm.requestLocationUpdates(providerName, 180000, 0, ll);
4

3 に答える 3

0

良い考えかもしれませんし、そうでないかもしれません。

私がしたことは、ネットワークと GPS プロバイダーの両方を登録したことです... GPS 座標のフェッチを開始したら、ブール変数を使用して location.getProvider() を使用してフェッチされたネットワーク プロバイダーの座標を無視します。

于 2013-01-03T22:53:03.790 に答える
0

私の実装のために。null が返された場合は、最初に GPS の位置を確認します。次に、ネットワークの場所を確認します。

Location locationGps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location locationNetwork = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

        if (locationGps != null) {
            //set location as gps
            hasFix = true;
        }

        else if (locationNetwork != null) {
            //set location as network
            hasFix = true;
        }
于 2013-01-03T23:07:35.397 に答える
0

1 つの解決策は、GPS と NETWORK の更新を非同期に要求することです。GPS と NETWORK の両方に 2 つの個別のリスナーが必要です。どちらのリスナーが最初に返されても、他のプロバイダーの更新を取得できなくなります。(つまり、最初にネットワークから結果を取得する場合は、ネットワークと gps の更新の取得を停止します。)

あなたが混乱しているかどうかを教えてください。

于 2013-01-03T22:09:10.363 に答える