1

私のアプリでは、位置情報の更新をリッスンするように、両方のプロバイダーを細かい精度と粗い精度で設定しました。私は、細かい場所を使用するとGPSによって提供され、粗い場所を使用するとネットワークプロバイダーによって提供されることを理解しています(このリンクからhttp://www.alonsoruibal.com/using-two-locationproviders-on-android/)。ここで、gpsが無効になっている場合はアプリをネットワークに切り替え、gpsが有効になっている場合はアプリに切り替えます。これはonStatusChanged方法を使用して行うことができますか?私の質問は、このコードは大丈夫ですか?

public static final int OUT_OF_SERVICE = 0;
public static final int TEMPORARILY_UNAVAILABLE = 1;
public static final int AVAILABLE = 2;

Criteria criteria = new Criteria();
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAccuracy(Criteria.ACCURACY_FINE);
providerFine = locationManager.getBestProvider(criteria, true);
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
providerCoarse = locationManager.getBestProvider(criteria, true);

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    if (provider.equals(providerFine)) {
        if (status == 0) {
            locationManager.requestLocationUpdates(providerCoarse, 60000,20,this);
        }
        if (status == 2) {
            locationManager.requestLocationUpdates(providerFine, 60000, 20, this);
        }
    }// provider == fine
}

また、更新がすでに要求されている場合(私のコードの以前のどこかで、ここには配置しませんでした)(両方のプロバイダーの場合)、このonStatusChangedメソッドで再度要求しても問題ありません。または、最初に更新を削除する必要がありますか?

4

1 に答える 1

0

それは私にはうまく見えます。追加する前に、更新リスナーを削除することをお勧めします。清潔で一貫性を保つため。

于 2011-08-11T00:35:46.290 に答える