반응형
안드로이드에서 위치, 저장소 읽기/쓰기 등을 하기 위해서는 권한이 필요합니다.
앱에서 사용자에게 권한을 요청하는 방법입니다.
1. AndroidManifast.xml에 필요한 권한을 추가합니다.
위치 권한(ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION)을 추가했습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test">
...
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
2. 앱이 실행하면 권한이 부여되지 않으면 요청합니다.
class MainActivity : AppCompatActivity() {
val MY_PERMISSION_ACCESS_ALL = 100
...
override fun onCreate(savedInstanceState: Bundle?) {
...
if(ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
var permissions = arrayOf(
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
)
ActivityCompat.requestPermissions(this, permissions, MY_PERMISSION_ACCESS_ALL)
}
}
}
3. 사용자가 권한을 거부(Deny)하면 앱을 종료하도록 처리합니다.
(1) 권한 요청이 완료되면 onRequestPermissionsResult 함수를 호출하며 권한 요청에 대한 결과를 아규먼트로 받을 수 있습니다.
onRequestPermissionsResult 함수를 오버라이딩합니다.
(메뉴 Code > Override Methods에서 쉽게 추가 할 수 있습니다.)
class MainActivity : AppCompatActivity() {
val MY_PERMISSION_ACCESS_ALL = 100
...
override fun onCreate(savedInstanceState: Bundle?) {
...
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode === MY_PERMISSION_ACCESS_ALL) {
if (grantResults.size > 0) {
for (grant in grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) System.exit(0)
}
}
}
}
}
4. 실행 결과
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 & iOS 앱 화면 디자인 모음 사이트 (0) | 2021.12.28 |
---|---|
안드로이드 코틀린 - google play-services를 이용한 위치정보 얻기 (0) | 2021.09.27 |
안드로이드 코틀린 - 뷰바인딩(View Binding) (0) | 2021.09.25 |
안드로이드 코틀린(Kotlin) - 오류 Module was compiled with an incompatible version of Kotlin. (0) | 2021.09.10 |
안드로이드 개발 Java에서 Kotlin으로의 항해 (0) | 2021.09.01 |
댓글