0

正確な GPS 修正を必要とするアプリに取り組んでいます。が有効になっているGPS_PROVIDERが利用できない場合 (トンネルにいるときなど)、アプリを に切り替える必要がありNETWORK_PROVIDERます。

OnStatusChanged OUT_OF_SERVICEGPS 修正ができないかどうかを識別するためにlocationListener を使用できますか?

このようなもの:

public void onStatusChanged(String provider, int status, Bundle extras) {
    //0 = OUT_OF_SERVICE
    if (status == 0) {
        //try requesting updates using NETWORK_PROVIDER
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
        //TOAST MESSAGE: GPS UNAVAILABLE ATTEMPTING FIX WITH NETWORK
        ...

私はOnStatusChanged正しく使用していますか?最初に GPS 修正を試み、利用できない場合は NETWORK に切り替える簡単でより良い方法はありますか?

4

1 に答える 1

3

これを追加lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);すると、ネットワークを使用して位置の取得が開始されますが、トンネルから出ると、ネットワークとGPSからの取得が開始されます。あなたを使用しlocation.getProvider()て、それがGPSであるかネットワークであるかを知るために区別することができるはずです。

アプリの実行中にGPSステータスが変化しない場合(たとえば、GPS修正なしで常に屋内にいる場合)、一部のデバイスはOnStatusChanged()メソッドをトリガーしません。

アプリの実行中にGPSステータスを変更した場合(たとえば、内部にいて修正を取得できず、外部に出て修正を取得できる場合、またはその逆の場合)、OnStatusChanged()メソッドはすべてのデバイスで起動する必要があります。

完全に機能するオープンソースアプリを例として使用したい場合は、AndroidチームのMikeLockwoodによるGPSTestを試してください。

GooglePlayでのGPSTest

GPSTestのソースコード

デバイスが修正を取得できない場合でも常に更新されるGPSの詳細については、GPSStatusListenerを登録することをお勧めします。

アクティビティで、クラス変数を宣言します。

private LocationManager mService;
private GpsStatus mStatus;

...そしてGPSStatusの変更を処理するメソッドを追加します。

public void onGpsStatusChanged(int event) {
    mStatus = mService.getGpsStatus(mStatus);
    switch (event) {
        case GpsStatus.GPS_EVENT_STARTED:
            // Do Something with mStatus info
            break;
        case GpsStatus.GPS_EVENT_STOPPED:
            // Do Something with mStatus info
            break;
        case GpsStatus.GPS_EVENT_FIRST_FIX:
            // Do Something with mStatus info
            break;
        case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            // Do Something with mStatus info
            break;
    }
}

次に、アクティビティのOnCreate()で、GPSStatusListenerを登録します。

mService = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mService.addGpsStatusListener(this);

GPSTestアプリでは、このコードに基づいて、GPSStatusListenerが更新されるたびに、現在利用可能な衛星のリストが画面に表示されます。

このようにして、携帯電話がGPS修正を取得できない場合でも、システムのGPSステータスに関するアクティブな更新を受信します(したがって、がトリガーされない場合がありますOnStatusChangedLocationListener

于 2013-01-10T17:47:56.417 に答える