0

GPSが有効な場合にのみコードを実行したいアプリケーションを開発しています。GPSはオンですが、コードはまだ実行されていません。詳細をご覧ください

私は、コードのこの部分を使用してGPSをチェックしています:

isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

をそして今、私はこのようにそれを使用しています:

if (isGPSEnabled) { 
      gps_off.setVisibility(View.INVISIBLE); 
      ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(getBaseContext()); 
      locationProvider.getLastKnownLocation() 
        .subscribe(new Action1<Location>() { 
         @Override 
         public void call(Location location) { 
          currentLatDoubleA = location.getLatitude(); 
          currentLngDoubleA = location.getLongitude(); 
          Toast.makeText(getBaseContext(), "User's location retrieved", Toast.LENGTH_SHORT).show(); 
         } 
        }); 
//  } 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        retrieveHRequest(); 
       } 
      }, 2000); 
     } else { 
      gps_off.setVisibility(View.VISIBLE); 
      Snackbar snackbar = Snackbar 
        .make(coordinatorLayout, "No location detected!", Snackbar.LENGTH_LONG) 
        .setAction("RETRY", new View.OnClickListener() { 
         @Override 
         public void onClick(View view) { 

          ifLocationAvailable(); 
         } 
        }); 
      snackbar.setDuration(Snackbar.LENGTH_INDEFINITE); 
      snackbar.show(); 
     } 

問題はGPSを回した後でも、ということですオンにすると、Snackbarはまだ表示されています。No location detected!メッセージです。これは、GPSがオンのときでもGPSがオフのときに実行されるコードが実行されていることを意味します。

もう1つ注意すべき点は、アプリケーションを終了してからアプリケーションを再起動するときに、GPSがオンのときに実行するコードが問題なく実行されていることです。

ここで何が問題になりますか?

お知らせください。

答えて

0

あなたのアプリケーションでは、GPSの状態を変更することを監視するためのブロードキャスト受信機を実装したいと考えています。その後、アプリケーションだけがGPSの変化する状況について理解しています。

このコードは、

public class BootReceiver extends BroadcastReceiver { 

     @Override 
    public void onReceive(Context context, Intent intent) { 
     LocationManager locationManager = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 
     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      // gps enabled and do your action here  } else { 
      // gps disabled and do you snack bar action 
     } 
    } 
} 
+0

どのように役立つか、私は疑問に与えられたコードに従って、このコードを調整/追加することができますか? –

+0

<受信機アンドロイド:名= "BootReceiver。"> <意図-フィルタ> <アクションアンドロイド:名= "android.location.PROVIDERS_CHANGED" /> は、マニフェストあなたにこれを追加し、上記のコード –

+0

に感謝しますが、主な活動で上記のコードをどのように使用できますか? –

関連する問題