위치 서비스가 활성화되어 있는지 확인하는 방법


228

Android OS에서 앱을 개발 중입니다. 위치 서비스가 활성화되어 있는지 확인하는 방법을 모르겠습니다.

활성화 된 경우 "true"를 반환하고 그렇지 않은 경우 "false"를 반환하는 메서드가 필요합니다 (마지막 경우 활성화 할 수있는 대화 상자를 표시 할 수 있음).


3
나는 이것이 오래된 주제라는 것을 알고 있지만 따라갈 수있는 사람들을 위해 ... 구글은 이것에 대한 API를 발표했다. 참조 developers.google.com/android/reference/com/google/android/gms/...
피터 맥 클레 넌에게

여기에 비슷한 질문에 코드가 있습니다. 확인 해봐. 매우 도움이됩니다.
S bruce

참고 : SettingsApi는 더 이상 사용되지 않습니다. developers.google.com/android/reference/com/google/android/gms/…를 대신 사용하십시오 .
Rajiv

답변:


361

아래 코드를 사용하여 gps 공급자와 네트워크 공급자가 활성화되어 있는지 확인할 수 있습니다.

LocationManager lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean gps_enabled = false;
boolean network_enabled = false;

try {
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception ex) {}

try {
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}

if(!gps_enabled && !network_enabled) {
    // notify user
    new AlertDialog.Builder(context)
        .setMessage(R.string.gps_network_not_enabled)
        .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        }
        .setNegativeButton(R.string.Cancel,null)
        .show();    
}

그리고 매니페스트 파일에서 다음 권한을 추가해야합니다.

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

코드 감사합니다. 위치 관리자 확인 : lm.getAllProviders().contains(LocationManager.GPS_PROVIDER)(또는 NETWORK_PROVIDER)은 네트워크 옵션이없는 설정 페이지로 사용자를 이동시키지 않도록합니다.
petter

26
또한 : Settings.ACTION_SECURITY_SETTINGS해야합니다Settings.ACTION_LOCATION_SOURCE_SETTINGS
petter

2
전화가 비행기 모드인지 확인하고 처리 할 수 ​​있습니다 .... stackoverflow.com/questions/4319212/…
John

2
항상 false를 반환하는 데 사용되는 lm.isProviderEnabled (LocationManager.GPS_PROVIDER)에 문제가있었습니다. 새로운 Play 서비스 버전을 사용할 때 발생하는 것으로 보입니다.이 버전은 설정 활동을 표시하지 않고 대화 상자에서 바로 GPS를 켤 수있는 대화 상자를 표시합니다. 사용자는 해당 대화 상자에서 GPS를 켜지면, GPS가 켜져도 항상 false 그 진술의 반환
마르셀 Noguti

7
또한 빈, 혼란스럽고 쓸모없는 try-catch 블록을
두지 않아야

225

이 코드를 사용하여 확인합니다.

public static boolean isLocationEnabled(Context context) {
    int locationMode = 0;
    String locationProviders;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);

        } catch (SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }

        return locationMode != Settings.Secure.LOCATION_MODE_OFF;

    }else{
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }


} 

7
명확성을 위해 catch 블록에서 false를 반환하려고 할 수 있습니다. 또한 locationMode를 Settings.Secure.LOCATION_MODE_OFF로 초기화하십시오.
RyanLeonard

2
이전 및 새로운 Android 위치 API 모두에서 작동하기 때문에 좋은 대답입니다.
Diederik

2
LOCATION_PROVIDERS_ALLOWED- 링크이 상수는 API 레벨 19에서 더 이상 사용되지 않습니다. LOCATION_MODE 및 MODE_CHANGED_ACTION (또는 PROVIDERS_CHANGED_ACTION)
Choletski

3
이 답변은 정답으로 인정되었습니다. locationManager.isProviderEnabled () 메소드는 4.4 장치에서 신뢰할 수 없습니다 (다른 개발자도 다른 OS 버전에서도 동일한 문제가 있음을 알았습니다). 제 경우에는 GPS마다 true를 반환합니다 (위치 서비스가 활성화되어 있는지 여부는 중요하지 않습니다). 이 훌륭한 솔루션에 감사드립니다!
strongmayer

2
내 테스트 장치 인 Samsung SHV-E160K, android 4.1.2, API 16에서는 작동하지 않았습니다. GPS를 오프라인으로 만들지 만이 기능은 여전히 ​​참입니다. Android Nougat, API 7.1에서 테스트했습니다.
HendraWD

38

2020 년 현재

최신, 가장 짧은 방법은

public static Boolean isLocationEnabled(Context context)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// This is new method provided in API 28
            LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
            return lm.isLocationEnabled();
        } else {
// This is Deprecated in API 28
            int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                    Settings.Secure.LOCATION_MODE_OFF);
            return  (mode != Settings.Secure.LOCATION_MODE_OFF);

        }
    }

1
훌륭합니다! 그러나 더 나은 방법은 호출에 API 23이 필요하기 때문에 캐스팅을 제거 LocationManager.class하고 getSystemService메소드를 직접 전달하는 것 입니다. ;-)
Mackovich

6
또는 대신 LocationManagerCompat 를 사용할 수 있습니다 . :)
Mokkun

return lm! = null && lm.isLocationEnabled ()를 사용하십시오. return 대신에 lm.isLocationEnabled ();
Dr. DS

35

이 코드를 사용하여 사용자를 GPS로 활성화 할 수있는 설정으로 안내 할 수 있습니다.

    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if( !locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ) {
        new AlertDialog.Builder(context)
            .setTitle(R.string.gps_not_found_title)  // GPS not found
            .setMessage(R.string.gps_not_found_message) // Want to enable?
            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
                    owner.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton(R.string.no, null)
            .show();
    }

1
고마워하지만 GPS를 확인하기 위해 코드가 필요하지 않고 위치 서비스 만 필요합니다.
Meroelyth

1
위치 서비스는 항상 사용 가능하지만 다른 제공 업체를 사용하지 못할 수 있습니다.
lenik

4
@lenik에서 일부 기기는 특정 제공 업체가 사용 설정되어 있어도 위치 감지를 사용 / 사용 중지하는 것으로 보이는 설정 ( '설정> 개인> 위치 서비스> 내 위치에 액세스'아래)을 제공합니다. 나는 테스트하고있는 전화로 직접 이것을 보았고 Wifi와 GPS가 모두 활성화되었지만 내 응용 프로그램에서 죽은 것처럼 보입니다. 안타깝게도 설정을 사용하도록 설정했으며 '내 위치에 대한 액세스'설정을 사용 중지하더라도 원래 시나리오를 더 이상 재현 할 수 없습니다. 따라서 해당 설정이 isProviderEnabled()getProviders(true)메소드에 영향을 미치는지 말할 수 없습니다 .
Awnry Bear

... 다른 사람이 같은 문제를 겪을 경우를 대비하여 그 내용을 버리고 싶었습니다. 테스트 한 다른 장치에서는 이전에 설정을 본 적이 없습니다. 그것은 시스템 전체의 위치 감지 킬 스위치입니다. 그러한 설정이 활성화 (또는 보는 방식에 따라 비활성화)되었을 때 isProviderEnabled()getProviders(true)메소드가 어떻게 반응 하는지에 대해 경험이 있다면 , 당신이 무엇을 만났는지 알고 싶습니다.
Awnry Bear

25

Android X로 마이그레이션하고 사용

implementation 'androidx.appcompat:appcompat:1.1.0'

LocationManagerCompat를 사용하십시오.

자바에서

private boolean isLocationEnabled(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    return LocationManagerCompat.isLocationEnabled(locationManager);
}

코 틀린에서

private fun isLocationEnabled(context: Context): Boolean {
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return LocationManagerCompat.isLocationEnabled(locationManager)
}

이것은 Android 1.0 이후의 모든 Android 버전에서 작동합니다. 그러나 Before API version LOLLIPOP [API Level 21], this method would throw SecurityException if the location permissions were not sufficient to use the specified provider.네트워크 나 gps 제공자에 대한 권한이없는 경우 활성화 된 네트워크에 따라 예외가 발생할 수 있습니다. 자세한 정보는 소스 코드를 확인하십시오.
xuiqzy

15

위의 답변을 해결하려면 API 23에서 "위험한"권한 검사를 추가하고 시스템 자체를 검사해야합니다.

public static boolean isLocationServicesAvailable(Context context) {
    int locationMode = 0;
    String locationProviders;
    boolean isAvailable = false;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }

        isAvailable = (locationMode != Settings.Secure.LOCATION_MODE_OFF);
    } else {
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        isAvailable = !TextUtils.isEmpty(locationProviders);
    }

    boolean coarsePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED);
    boolean finePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);

    return isAvailable && (coarsePermissionCheck || finePermissionCheck);
}

기호 Manifest.permission.ACCESS_COARSE_LOCATION 및 Manifest.permission.ACCESS_FINE_LOCATION 확인할 수 없음
나디 코즐

android.Manifest.permission.ACCESS_FINE_LOCATION 사용
aLIEz

7

공급자가 활성화되어 있지 않으면 "수동"이 가장 좋은 공급자입니다. 참조 https://stackoverflow.com/a/4519414/621690를

    public boolean isLocationServiceEnabled() {
        LocationManager lm = (LocationManager)
                this.getSystemService(Context.LOCATION_SERVICE);
        String provider = lm.getBestProvider(new Criteria(), true);
        return (StringUtils.isNotBlank(provider) &&
                !LocationManager.PASSIVE_PROVIDER.equals(provider));
    }

7

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

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

매니페스트 파일의 권한으로

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

6

이 if 절은 내 의견으로는 위치 서비스가 있는지 쉽게 확인합니다.

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        //All location services are disabled

}

4

NETWORK_PROVIDER에 이러한 방식을 사용 하지만 GPS를 추가하고 추가 할 수 있습니다 .

LocationManager locationManager;

에서 에서 onCreate I 넣어

   isLocationEnabled();
   if(!isLocationEnabled()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.network_not_enabled)
                .setMessage(R.string.open_location_settings)
                .setPositiveButton(R.string.yes,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                            }
                        })
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();
        alert.show();
    } 

확인 방법

protected boolean isLocationEnabled(){
    String le = Context.LOCATION_SERVICE;
    locationManager = (LocationManager) getSystemService(le);
    if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        return false;
    } else {
        return true;
    }
}

2
당신은 if-then-else가 필요하지 않습니다, 당신은 그냥 돌아올 수 있습니다locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
LadyWoodi

4

사용 가능한 true경우 " " 를 반환하는 매우 유용한 방법입니다 Location services.

public static boolean locationServicesEnabled(Context context) {
        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean gps_enabled = false;
        boolean net_enabled = false;

        try {
            gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        } catch (Exception ex) {
            Log.e(TAG,"Exception gps_enabled");
        }

        try {
            net_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        } catch (Exception ex) {
            Log.e(TAG,"Exception network_enabled");
        }
        return gps_enabled || net_enabled;
}

3

안드로이드 구글지도에서 현재 지리적 위치 를 얻으 려면 장치 위치 옵션을 켜야 합니다. 위치가 켜져 있는지 여부를 확인하려면 메소드 에서이 메소드를 간단하게 호출 할 수 있습니다 onCreate().

private void checkGPSStatus() {
    LocationManager locationManager = null;
    boolean gps_enabled = false;
    boolean network_enabled = false;
    if ( locationManager == null ) {
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    }
    try {
        gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex){}
    try {
        network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex){}
    if ( !gps_enabled && !network_enabled ){
        AlertDialog.Builder dialog = new AlertDialog.Builder(MyActivity.this);
        dialog.setMessage("GPS not enabled");
        dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //this will navigate user to the device location settings screen
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        });
        AlertDialog alert = dialog.create();
        alert.show();
    }
}

3

코 틀린

 private fun isLocationEnabled(mContext: Context): Boolean {
    val lm = mContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER) || lm.isProviderEnabled(
            LocationManager.NETWORK_PROVIDER)
 }

대화

private fun showLocationIsDisabledAlert() {
    alert("We can't show your position because you generally disabled the location service for your device.") {
        yesButton {
        }
        neutralPressed("Settings") {
            startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
        }
    }.show()
}

이런 식으로 전화

 if (!isLocationEnabled(this.context)) {
        showLocationIsDisabledAlert()
 }

힌트 : 대화 상자에는 다음과 같은 가져 오기가 필요합니다 (android studio에서이를 처리해야 함).

import org.jetbrains.anko.alert
import org.jetbrains.anko.noButton

그리고 매니페스트에는 다음 권한이 필요합니다.

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

2

GoogleMaps doas와 같이 위치 업데이트를 요청하고 대화 상자를 함께 표시 할 수 있습니다. 코드는 다음과 같습니다.

googleApiClient = new GoogleApiClient.Builder(getActivity())
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).build();
googleApiClient.connect();

LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                    .addLocationRequest(locationRequest);

builder.setAlwaysShow(true); //this is the key ingredient

PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
    @Override
    public void onResult(LocationSettingsResult result) {
        final Status status = result.getStatus();
        final LocationSettingsStates state = result.getLocationSettingsStates();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                // All location settings are satisfied. The client can initialize location
                // requests here.
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                // Location settings are not satisfied. But could be fixed by showing the user
                // a dialog.
                try {
                    // Show the dialog by calling startResolutionForResult(),
                    // and check the result in onActivityResult().
                    status.startResolutionForResult(getActivity(), 1000);
                } catch (IntentSender.SendIntentException ignored) {}
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                // Location settings are not satisfied. However, we have no way to fix the
                // settings so we won't show the dialog.
                break;
            }
        }
    });
}

더 많은 정보가 필요하면 LocationRequest 클래스를 확인하십시오 .


안녕하세요, 지난 이틀 이후 사용자의 현재 위치를 확보하기 위해 고심하고 있습니다. 나는 사용자의 현재 위도를 필요로합니다 .Google API 클라이언트를 사용하여 수행 할 수 있다는 것을 알고 있습니다. 그러나 마시맬로 권한을 통합하는 방법. 또한 사용자의 위치 서비스가 켜져있는 경우이를 활성화하는 방법. 도울 수 있니?
Chetna

안녕하세요! 당신은 많은 질문을 가지고 있습니다. 더 공식적으로 답변 할 수 있도록 새로운 질문을하십시오!
bendaf

내 질문을 여기에 게시했습니다 : stackoverflow.com/questions/39327480/…
Chetna

2

첫 번째 코드를 사용하여 isLocationEnabled 메소드를 작성하십시오.

 private LocationManager locationManager ;

protected boolean isLocationEnabled(){
        String le = Context.LOCATION_SERVICE;
        locationManager = (LocationManager) getSystemService(le);
        if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
            return false;
        } else {
            return true;
        }
    }

그리고 ture if ture if if map을 열고 false 의도 의도 ACTION_LOCATION_SOURCE_SETTINGS

    if (isLocationEnabled()) {
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        locationClient = getFusedLocationProviderClient(this);
        locationClient.getLastLocation()
                .addOnSuccessListener(new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        // GPS location can be null if GPS is switched off
                        if (location != null) {
                            onLocationChanged(location);

                            Log.e("location", String.valueOf(location.getLongitude()));
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e("MapDemoActivity", e.toString());
                        e.printStackTrace();
                    }
                });


        startLocationUpdates();

    }
    else {
        new AlertDialog.Builder(this)
                .setTitle("Please activate location")
                .setMessage("Click ok to goto settings else exit.")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        startActivity(intent);
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        System.exit(0);
                    }
                })
                .show();
    }

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


1

가장 간단한 방법으로 할 수 있습니다

private boolean isLocationEnabled(Context context){
int mode =Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                        Settings.Secure.LOCATION_MODE_OFF);
                final boolean enabled = (mode != android.provider.Settings.Secure.LOCATION_MODE_OFF);
return enabled;
}

1

AndroidX를 사용하는 경우 아래 코드를 사용하여 위치 서비스 사용 여부를 확인하십시오.

fun isNetworkServiceEnabled(context: Context) = LocationManagerCompat.isLocationEnabled(context.getSystemService(LocationManager::class.java))

0

네트워크 제공자를 확인하려면 GPS 제공자와 네트워크 제공자 모두에 대한 반환 값을 확인하는 경우 isProviderEnabled에 전달 된 문자열을 LocationManager.NETWORK_PROVIDER로 변경하면됩니다. 둘 다 false는 위치 서비스가 없음을 의미합니다.


0
private boolean isGpsEnabled()
{
    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    return service.isProviderEnabled(LocationManager.GPS_PROVIDER)&&service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}

0
    LocationManager lm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    boolean gps_enabled = false;
    boolean network_enabled = false;

    try {
        gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch(Exception e){
         e.printStackTrace();
    }

    try {
        network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch(Exception e){
         e.printStackTrace();
    }

    if(!gps_enabled && !network_enabled) {
        // notify user
        new AlertDialog.Builder(this)
                .setMessage("Please turn on Location to continue")
                .setPositiveButton("Open Location Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                        startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                    }

                }).
                setNegativeButton("Cancel",null)
                .show();
    }

0
public class LocationUtil {
private static final String TAG = LocationUtil.class.getSimpleName();

public static LocationManager getLocationManager(final Context context) {
    return (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}

public static boolean isNetworkProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}

public static boolean isGpsProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.GPS_PROVIDER);
}

// Returns true even if the location services are disabled. Do not use this method to detect location services are enabled.
private static boolean isPassiveProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.PASSIVE_PROVIDER);
}

public static boolean isLocationModeOn(final Context context) throws Exception {
    int locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
    return locationMode != Settings.Secure.LOCATION_MODE_OFF;
}

public static boolean isLocationEnabled(final Context context) {
    try {
        return isNetworkProviderEnabled(context) || isGpsProviderEnabled(context)  || isLocationModeOn(context);
    } catch (Exception e) {
        Log.e(TAG, "[isLocationEnabled] error:", e);
    }
    return false;
}

public static void gotoLocationSettings(final Activity activity, final int requestCode) {
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    activity.startActivityForResult(intent, requestCode);
}

public static String getEnabledProvidersLogMessage(final Context context){
    try{
        return "[getEnabledProvidersLogMessage] isNetworkProviderEnabled:"+isNetworkProviderEnabled(context) +
                ", isGpsProviderEnabled:" + isGpsProviderEnabled(context) +
                ", isLocationModeOn:" + isLocationModeOn(context) +
                ", isPassiveProviderEnabled(ignored):" + isPassiveProviderEnabled(context);
    }catch (Exception e){
        Log.e(TAG, "[getEnabledProvidersLogMessage] error:", e);
        return "provider error";
    }
}

}

isLocationEnabled 메소드를 사용하여 위치 서비스가 사용 가능한지 감지하십시오.

https://github.com/Polidea/RxAndroidBle/issues/327# 페이지에서 수동 공급자를 사용하지 않는 대신 위치 모드를 사용하는 이유에 대한 자세한 정보를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.