안드로이드에서는 위치, 저장소 읽기/쓰기 등을 하기 위해서는 권한이 필요하다. AndroidManifest에 권한을 추가하고 Activity에서 권한을 요청하는 방법을 사용하면 된다!
AndroidManifest.xml
에 필요한 권한을 추가하면 된다.
아래에 몇 가지 주요한 권한이 있다!
아래 언급한 것 외에도 다양한 권한이 존재하며, 앱의 필요한 기능에 맞게 권한을 추가하면 된다. 다만, 사용자의 개인 정보와 관련된 권한을 요청할 때에는 사용자의 프라이버시를 존중하고 꼭 필요한 경우에만 요청하는 것이 좋다. 앱이 불필요한 권한을 요구하면 사용자가 앱을 신뢰하지 않을 수 있다.
카메라 앱을 사용하여 사진을 찍거나 동영상을 녹화하는 경우 필요한 권한
<uses-permission android:name="android.permission.CAMERA" />
인터넷 연결을 사용하여 웹 서버와 통신하려는 경우 필요한 권한입니다.
<uses-permission android:name="android.permission.INTERNET" />
GPS 또는 네트워크를 통해 사용자의 위치 정보를 가져오려는 경우 필요한 권한
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
장치의 저장소에 파일을 읽고 쓰려는 경우 필요한 권한
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
전화를 거는 등의 통화 관련 작업을 위해 필요한 권한
<uses-permission android:name="android.permission.CALL_PHONE" />
SMS를 보내거나 받는 등의 작업을 위해 필요한 권한
<uses-permission android:name="android.permission.SEND_SMS" />
마이크를 사용하여 음성 녹음 또는 음성 인식을 하려는 경우 필요한 권한
<uses-permission android:name="android.permission.RECORD_AUDIO" />
연락처 정보를 읽거나 수정하려는 경우 필요한 권한
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
앱을 실행했을때 해당 권한이 없다면 요청!
아래 코드는 위치 권한을 요청한 것이다.
class MainActivity : AppCompatActivity() {
val MY_PERMISSION_ACCESS_ALL = 123
...
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)
}
}
}
권한 요청이 완료되면 onRequestPermissionResult
함수를 호출하며 권한 요청에 대한 결과를 argument로 받을 수 있다.
class MainActivity : AppCompatActivity() {
val MY_PERMISSION_ACCESS_ALL = 123
...
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)
}
}
}
}
}
[참고 사이트]
'런타임 권한 요청', developers
'안드로이드 코틀린 - 권한(Permission) 요청', 프로그래머의 꿈