gimmickbutreal

[Android Studio] 위치 정보 엑세스 권한 요청 본문

Algorithm/Java

[Android Studio] 위치 정보 엑세스 권한 요청

isshosng 2022. 5. 11. 20:38

위치기반 앱을 만들기 위해서는 위치 정보 액세스 권한을 요청해야 합니다.

 

우선 manifest에 아래의 두 줄의 코드를 입력해줍니다.

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

ACCESS_COARSE_LOCATION 권한은 선언하고 ACCESS_FINE_LOCATION 권한은 선언하지 않으면 높은 정확도의 위치를 수신할 수 없으므로 두 줄 모두 입력해주어야 합니다. 

 

 

// 위치 정보 엑세스 권한 요청
private final ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(
        new ActivityResultContracts.RequestMultiplePermissions(),
        result -> {
            Boolean fineLocationGranted = result.get(Manifest.permission.ACCESS_FINE_LOCATION);
            Boolean coarseLocationGranted = result.get(Manifest.permission.ACCESS_COARSE_LOCATION);

            if (fineLocationGranted != null && fineLocationGranted) {
                // Precise location access granted
                startLocationUpdates();

            } else if (coarseLocationGranted != null && coarseLocationGranted) {
                startLocationUpdates();
                // Only approximate location access granted

            } else {
                Toast.makeText(this,
                        "Unable to launch app because location permissions are denied.",
                        Toast.LENGTH_SHORT
                ).show();
                finish();
            }
        }
);

 

위와 같은 코드를 통해 위치 정보 액세스 권한을 요청할 수 있습니다.

 

private void checkLocationPermission() {
    boolean coarseLocationGranted = ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.ACCESS_COARSE_LOCATION
    ) == PackageManager.PERMISSION_GRANTED;

    boolean fineLocationGranted = ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.ACCESS_FINE_LOCATION
    ) == PackageManager.PERMISSION_GRANTED;


    // Before you perform the actual permission request, check whether your app
    // already has the permissions, and whether your app needs to show a permission
    // rationale dialog. For more details, see (link)Request permissions.(구글개발자)
    if (!coarseLocationGranted && !fineLocationGranted) {
        locationPermissionRequest.launch(new String[]{
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION
        });
    } else {
        startLocationUpdates();
    }
}

위 코드는 위치 권한이 부여되었는지 확인하는 과정을 나타냅니다.

위치 권한이 없으면 위치 권한을 요청하며, 권한이 있는 경우에는 사용자의 위치를 실시간으로 받기 위해 startLocationUpdates() method를 호출합니다.

 

 

 

아래의 글을 참고하였습니다.

https://developer.android.com/training/location/permissions?hl=ko 

 

위치 정보 액세스 권한 요청  |  Android 개발자  |  Android Developers

위치 정보 액세스 권한 요청 사용자 개인 정보를 보호하려면 위치 서비스를 사용하는 앱에서 위치 정보 액세스 권한을 요청해야 합니다. 위치 정보 액세스 권한을 요청할 때는 다른 런타임 권한

developer.android.com