Android에서는 사용자가 다른 앱 권한을 부여하거나 거부할 수 있습니다.
이러한 권한은 다음에 대한 액세스를 보호합니다.
Install-time permissions
Permissions : Workflow
Get the CAMERA permission from user
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.seo.permissioncamera">
<uses-permission android:name="android.permission.CAMERA"/>
<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.PermissionCamera">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
모든 권한은 Manifest.permission에 정의되어 있다
https://developer.android.com/reference/kotlin/android/Manifest.permission
<uses-permission android:name="android.permission.CAMERA"/>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="356dp"
android:layout_marginBottom="100dp"
android:text="Dangerous Permission"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginBottom="212dp"
android:text="camera"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/textView2"
app:layout_constraintHorizontal_bias="0.511"
app:layout_constraintStart_toStartOf="@+id/textView2"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
</androidx.constraintlayout.widget.ConstraintLayout>
val btnCamera = findViewById<Button>(R.id.button)
btnCamera.setOnClickListener {
Log.d("DKMobile", "CAMERA button pressed.")
val btnCamera = findViewById<Button>(R.id.button)
btnCamera.setOnClickListener {
Log.d("DKMobile", "CAMERA button pressed.")
val cameraPermission =
ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btnCamera = findViewById<Button>(R.id.button)
btnCamera.setOnClickListener {
Log.d("DKMobile", "CAMERA button pressed.")
val cameraPermission =
ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
if (cameraPermission == PackageManager.PERMISSION_GRANTED) {
Log.d("DKMOBILE", "CAMERA permission already granted")
var permitTxt = findViewById<TextView>(R.id.textView2)
permitTxt.text = "CAMERA permission granted now"
} else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), 99)
var permitTxt = findViewById<TextView>(R.id.textView2)
permitTxt.text = "CAMERA permission not granted"
}
}
}
99 : 개발자 -> 안드로이드 시스템에게 요청한 것을 확인하기 위해 작성 -> client가 안드로이드 시스템에게 요청하는 것과 분리하기 위함
val btnCamera = findViewById<Button>(R.id.button)
btnCamera.setOnClickListener {
Log.d("DKMobile", "CAMERA button pressed.")
val cameraPermission =
ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
if (cameraPermission == PackageManager.PERMISSION_GRANTED) {
Log.d("DKMOBILE", "CAMERA permission already granted")
var permitTxt = findViewById<TextView>(R.id.textView2)
permitTxt.text = "CAMERA permission granted now"
} else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), 99)
var permitTxt = findViewById<TextView>(R.id.textView2)
permitTxt.text = "CAMERA permission not granted"
}
}
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
var permitTxt = findViewById<TextView>(R.id.textView2)
when (requestCode) {
99 -> {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d("DKMOBILE", "CAMERA permission granted now")
permitTxt.text = "CAMERA permission granted now"
} else {
Log.d("DKMOBILE", "CAMERA permission not granted")
permitTxt.text = "CAMERA permission not granted"
}
}
}
}
var content = findViewById<TextView>(R.id.textview)
val fileName = "internal.txt"
val fileBody = "File for testing"
val buffo = applicationContext.openFileOutput(fileName, Context.MODE_PRIVATE)
buffo.write(fileBody.toByteArray())
content.text = fileBody
buffo.close()
val buffi = applicationContext.openFileInput(fileName)
val buffr = buffi.bufferedReader()
var txt = buffr.readLine()
content.text = fileBody
buffr.close()
Log.d("FILETEST", "---> $txt")