반응형
Permission
설명
- 안드로이드는 개인 정보, 센서, 카메라, 저장소 등 개인 정보와 관련된 기능을 사용하기 위해서는 권한을 등록해야 한다.
코드
manifests/AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android_example">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Androidexample">
<activity android:name=".MainActivity">
<intent-filter>
<!-- Entry Point -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<!-- 인터넷 사용 권한 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 위치 정보 사용 권한 -->
<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_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!-- 문자 메시지 권한 -->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
MainActivity
class MainActivity : AppCompatActivity() {
private var textView: TextView? = null
private val permissionList = arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.SEND_SMS,
Manifest.permission.RECEIVE_SMS
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView)
checkPermission()
}
private fun checkPermission() {
// 마쉬멜로우 버전 이전까지는 권한이 모두 활성화 되어있는 상태이므로 처리 불필요
// 마쉬멜로우 이후 버전부터는 모두 비활성화 되어있고 사용자가 활성화 시키는 방식이므로 해당 처리 필요
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return
}
for (permission: String in permissionList) {
val status = checkCallingOrSelfPermission(permission)
// 못하면 권한 요청 해제
if (status == PackageManager.PERMISSION_DENIED) {
requestPermissions(permissionList, 0)
break
}
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
textView?.text = ""
for (index in grantResults.indices) {
if (grantResults[index] == PackageManager.PERMISSION_GRANTED) {
textView?.append("${permissionList[index]} : 허용함\n")
} else {
textView?.append("${permissionList[index]} : 허용하지 않음\n")
}
}
}
}
참고
반응형
'Development > Android' 카테고리의 다른 글
[Android] Http Network (0) | 2021.02.09 |
---|---|
[Android] File IO (0) | 2021.02.09 |
[Android] Notification (0) | 2021.02.09 |
[Android] Application (0) | 2021.02.09 |
[Android] ViewModel (0) | 2021.02.09 |