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를 다시 켰을 때 Snackbar의 'RETRY'버튼을 클릭하면 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

을 확장하는 static 내부 클래스이며,'NotificationsConfigurationActivity'와'MyActivity'는 무엇입니까? –

관련 문제