Android 기기의 GPS가 활성화되어 있는지 확인하는 방법


답변:


456

가장 좋은 방법은 다음과 같습니다.

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}

1
주로 GPS 설정을 확인하려는 의도 입니다. 자세한 내용 은 github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… 를 참조하십시오.
마커스

3
멋진 코드 스 니펫. @SuppressWarnings를 제거했는데 경고가 표시되지 않습니다. 아마도 불필요합니까?
스팬

30
alert메모리 누수를 피하기 위해 onDestroy에서 해제 할 수 있도록 전체 활동을 선언 하는 것이 좋습니다 ( if(alert != null) { alert.dismiss(); })
Cameron

배터리 절약 상태라면 여전히 작동합니까?
Prakhar Mohan Srivastava

3
@PrakharMohanSrivastava 위치 설정이 절전 모드 인 경우 false LocationManager.NETWORK_PROVIDER를 반환 하지만 true를 반환합니다.
Tim

129

Android에서는 기기에서 GPS가 사용 설정되어 있는지 LocationManager를 사용하여 쉽게 확인할 수 있습니다.

다음은 점검 할 간단한 프로그램입니다.

GPS 사용 여부 :-AndroidManifest.xml에 아래 사용자 권한 줄을 추가하여 위치에 액세스하십시오.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

자바 클래스 파일은

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

출력은 다음과 같습니다

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


1
함수를 시도해도 아무 변화가 없습니다. 그래도 테스트 할 때 오류가 없습니다.
Airikr

나는 그것을 작동시켰다! :) 많은 감사하지만 답변을 편집하기 전까지는 투표 할 수 없습니다 : /
Airikr

3
문제 없습니다 @Erik Edgren 당신은 해결책을 얻습니다.

@ user647826 : 훌륭합니다! 잘 작동합니다. 당신은 내 밤을 저장
Addi

1
충고 : alert전체 활동에 대해 선언 onDestroy()하여 메모리 누수를 피하기 위해 해제 할 수 있습니다 ( if(alert != null) { alert.dismiss(); })
naXa

38

예 GPS 설정은 프라이버시 설정이므로 프로그래밍 방식으로 더 이상 변경할 수 없으며 프로그램에서 켜져 있는지 여부를 확인하고 켜져 있지 않은 경우 처리해야합니다. GPS가 꺼져 있음을 사용자에게 알리고 원하는 경우 사용자에게 설정 화면을 표시하기 위해 이와 같은 것을 사용할 수 있습니다.

위치 제공 업체가 있는지 확인

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

사용자가 GPS를 사용하려는 경우이 방법으로 설정 화면을 표시 할 수 있습니다.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

그리고 onActivityResult에서 사용자가 활성화했는지 여부를 확인할 수 있습니다

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

그것이 한 가지 방법이며 도움이되기를 바랍니다. 내가 잘못하고 있는지 알려주십시오.


2
안녕하십니까, 비슷한 문제가 있습니다 ... "REQUEST_CODE"란 무엇이며 어떤 용도인지 간단히 설명해 주시겠습니까?
poeschlorn

2
@poeschlorn Anna는 아래에 자세한 링크를 게시했습니다. 간단히 말해 RequestCode를 사용 startActivityForResult하면 여러 의도 로 사용할 수 있습니다 . 인 텐트가 활동으로 돌아 오면 RequestCode를 확인하여 어떤 인 텐트가 리턴되는지 확인하고 이에 따라 응답합니다.
Farray

2
provider빈 문자열이 될 수 있습니다. 수표를 다음과 같이 변경해야했습니다(provider != null && !provider.isEmpty())
Pawan

공급자가 ""일 수 있으므로 int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); 모드 = 0 GPS가 꺼져있는 경우
Levon Petrosyan

31

단계는 다음과 같습니다.

1 단계 : 백그라운드에서 실행중인 서비스를 만듭니다.

2 단계 : Manifest 파일에서도 다음 권한이 필요합니다.

android.permission.ACCESS_FINE_LOCATION

3 단계 : 코드 작성 :

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

4 단계 : 또는 다음을 사용하여 간단히 확인할 수 있습니다.

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

5 단계 : 서비스를 지속적으로 실행하여 연결을 모니터링하십시오.


5
GPS가 꺼져 있어도 GPS가 활성화되어 있음을 알려줍니다.
Ivan V

15

예, 아래 코드를 확인할 수 있습니다.

public boolean isGPSEnabled (Context mContext){
    LocationManager locationManager = (LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

9

이 방법은 LocationManager 서비스 를 사용합니다 .

소스 링크

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};

6

사용자가 설정에 GPS를 사용하도록 허용 한 경우 GPS가 사용됩니다.

더 이상이 기능을 명시 적으로 전환 할 수는 없지만 꼭 필요한 것은 아닙니다. 개인 정보 보호 설정이므로 조정하고 싶지 않습니다. 정확한 좌표를 얻는 앱으로 사용자가 괜찮다면 켜져 있습니다. 그런 다음 위치 관리자 API는 가능한 경우 GPS를 사용합니다.

GPS없이 앱이 실제로 유용하지 않고 꺼져있는 경우 인 텐트를 사용하여 오른쪽 화면에서 설정 앱을 열어 사용자가 활성화 할 수 있습니다.


6

이 코드는 GPS 상태를 확인합니다

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

`


3

당신의에서 LocationListener, 구현 onProviderEnabledonProviderDisabled이벤트 핸들러. 전화를 걸 때 requestLocationUpdates(...)휴대 전화에서 GPS가 비활성화 된 경우 전화 onProviderDisabled가 걸립니다. 사용자가 GPS를 활성화하면 onProviderEnabled호출됩니다.


2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.