0

ユーザーの現在地を取得するためにGPSをオンにする必要があるアプリを開発しています。ユーザーがGPSをオンにしているかどうかを確認/確認するにはどうすればよいですか?

私はGPSの現在の状態を確認するために、このコードを使用しています:

isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

、その後、私はこれをさらにコード実装しています:上記のコード

if (!isGPSEnabled) { 
        // ask to turn on GPS 
        Snackbar snackbar = Snackbar 
            .make(coordinatorLayout, "No location detected!", Snackbar.LENGTH_LONG) 
            .setAction("RETRY", new View.OnClickListener() { 
             @Override 
             public void onClick(View view) { 
              Toast.makeText(getBaseContext(), "first called", Toast.LENGTH_SHORT).show(); 
              // same codes gets executed i.e. to check if user enabled GPS or not 
             } 
            }); 
          snackbar.setDuration(Snackbar.LENGTH_INDEFINITE); 
          snackbar.show(); 
       } else { 
        // execute necessary code 
       } 

は正確の状態をチェックしていますGPSですが、GPSを再度オンにして「復帰」ボタンSnackbarをクリックすると、GPSがオンのときに実行されるはずのコードは実行されませんが、GPSがオフのときに実行されるはずのコード実行されています。

私はGPSをオンにしたことを確認するために、何らかの種類のレシーバーが必要ですか?

お知らせください。

答えて

0

ifステートメントはonClickメソッド内に表示されないため、ユーザーがGPSを有効にしているかどうかにかかわらず、そのメソッド内にあるものはすべて実行されます。

Snackbarをユーザーに表示しても構わない場合は、ブロードキャスト受信者を使用してロケーションプロバイダの変更をリッスンすることもできます。あなたの活動のonDestroy法について

mLocationProviderChangedReceiver = new LocalLocationProviderChangedReceiver(this); 
registerReceiver(mLocationProviderChangedReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION)); 

if (mLocationProviderChangedReceiver != null) { 
    unregisterReceiver(mLocationProviderChangedReceiver); 
    mLocationProviderChangedReceiver = null; 
} 

は、静的な内部クラスを作成します。あなたの活動ののonCreateメソッドで

private static class LocalLocationProviderChangedReceiver extends BroadcastReceiver { 

    private final WeakReference<MyActivity> mWeakActivity; 

    public LocalLocationProviderChangedReceiver(@NonNull MyActivity activity) { 
     mWeakActivity = new WeakReference<>(activity); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     MyActivity activity = mWeakActivity.get(); 
     if (activity != null) { 
      activity.refresh(); 
     } 
    } 

} 

あなたの活動にリフレッシュ方法:

public void refresh() { 
    final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    boolean isGpsEnabled = manager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    if (isGpsEnabled) { 
     // TODO: Do what you need to do with the GPS 
    } else { 
     // TODO: e.g. Show a textview displaying a warning, maybe you could start the intent to activate the Location: 
     // Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     // startActivity(i); 
    } 
} 
+0

「LocalLocationProviderChangedReceiver」は何ですか? –

+0

BroadcastReceiver – fernandospr

+0

を拡張する静的内部クラスと、 'NotificationsConfigurationActivity'および' MyActivity'は何ですか? –

関連する問題