Android Application

Kotlin 파일처리 : 권한과 디렉토리 확인하기

작성자 임베디드코리아 작성일23-10-06 22:13 조회1,522회 댓글0건

첨부파일

-------------------------------------------------------------------------------------
      activity_main.xml
-------------------------------------------------------------------------------------
<?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">

    <Button
        android:id="@+id/snackbar_button"
        android:layout_width="100dp"
        android:layout_height="30dp"
        android:text="권한 확인"
        tools:layout_editor_absoluteX="5dp"
        tools:layout_editor_absoluteY="20dp" />

    <TextView
        android:id="@+id/tvDirectory1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="70dp"
        android:layout_marginBottom="10dp"
        android:text="TextView1"
        android:background="#9BF8ED"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory2"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tvDirectory2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView2"
        android:background="#9BF8ED"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory3"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory1"
        />

    <TextView
        android:id="@+id/tvDirectory3"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView3"
        android:background="#9BF8ED"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory2"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory4"
        />

    <TextView
        android:id="@+id/tvDirectory4"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView4"
        android:background="#9BF8ED"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory3"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory5"
        />

    <TextView
        android:id="@+id/tvDirectory5"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView5"
        android:background="#9BF8ED"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory4"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory6" />

    <TextView
        android:id="@+id/tvDirectory6"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView6"
        android:background="#9BF8ED"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory5"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory7"  />

    <TextView
        android:id="@+id/tvDirectory7"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView7"
        android:background="#9BF8ED"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory6"
        app:layout_constraintBottom_toTopOf="@+id/tvDirectory8"  />

    <TextView
        android:id="@+id/tvDirectory8"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:text="TextView8"
        android:background="#9BF8ED"
        app:layout_constraintTop_toBottomOf="@+id/tvDirectory7" />

</androidx.constraintlayout.widget.ConstraintLayout>

------------------------------------------------------------------------------------
    MainActivity.kt
------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity() {
    private lateinit var tvDirectory1: TextView
    private lateinit var tvDirectory2: TextView
    private lateinit var tvDirectory3: TextView
    private lateinit var tvDirectory4: TextView
    private lateinit var tvDirectory5: TextView
    private lateinit var tvDirectory6: TextView
    private lateinit var tvDirectory7: TextView
    private lateinit var tvDirectory8: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        tvDirectory1 = findViewById(R.id.tvDirectory1)
        tvDirectory2 = findViewById(R.id.tvDirectory2)
        tvDirectory3 = findViewById(R.id.tvDirectory3)
        tvDirectory4 = findViewById(R.id.tvDirectory4)
        tvDirectory5 = findViewById(R.id.tvDirectory5)
        tvDirectory6 = findViewById(R.id.tvDirectory6)
        tvDirectory7= findViewById(R.id.tvDirectory7)
        tvDirectory8 = findViewById(R.id.tvDirectory8)

        var button = findViewById(R.id.snackbar_button) as Button
        button.setOnClickListener {
            checkPermission()
        }

        /* 내부저장소 */
        // 캐시(Cache)
        val fileCacheDir = cacheDir
        val getCacheDir = fileCacheDir.path
        tvDirectory1.setText(getCacheDir)


        // 데이터베이스(Database)
        val fileDataBase = getDatabasePath("Android")
        val getDatabasePath = fileDataBase.path
        tvDirectory2.setText(getDatabasePath)

        // 일반 파일

        // 일반 파일
        val fileFile = filesDir
        val getFile = fileFile.path
        tvDirectory3.setText(getFile)

        // 일반 파일 폴더

        // 일반 파일 폴더
        val fileFileName = getFileStreamPath("Android")
        val getFileName = fileFileName.path
        tvDirectory4.setText(getFileName)

        /* 외부저장소 - 공용 영역 */
        // 최상위 경로
        val getDirectory = Environment.getExternalStorageDirectory().toString() + "/tmp"
        tvDirectory5.setText(getDirectory)

        // 특정 데이터를 저장
        val fileAlarms = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)
        val getAlarms = fileAlarms.path
        tvDirectory6.setText(getAlarms)

        /* 외부저장소 - 어플리케이션 고유 영역 */
        // 특정 데이터를 저장
        val fileAlarms2 = getExternalFilesDirs(Environment.DIRECTORY_ALARMS)
        val getAlarms2 = fileAlarms2[0].path
        tvDirectory7.setText(getAlarms2)

        // 캐시 데이터를 저장
        val getCache2 = externalCacheDir.toString() + "/tmp"
        tvDirectory8.setText(getCache2)
    }


    //권한 확인
    fun checkPermission() {

        // 1. 위험권한(Camera) 권한 승인상태 가져오기
        val cameraPermission = ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
        if (cameraPermission == PackageManager.PERMISSION_GRANTED) {
            // 카메라 권한이 승인된 상태일 경우
            startProcess()

        } else {
            // 카메라 권한이 승인되지 않았을 경우
            requestPermission()
        }
    }

    // 2. 권한 요청
    private fun requestPermission() {
        ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CAMERA), 99)
    }

    // 권한 처리
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray) {
        when (requestCode) {
            99 -> {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    startProcess()
                } else {
                    Log.d("MainActivity", "종료")
                }
            }
        }
    }

    // 3. 카메라 기능 실행
    fun startProcess() {
        Toast.makeText(this, "카메라 기능 실행", Toast.LENGTH_SHORT).show()
    }

}

------------------------------------------------------------------------------------
 ***  AndroidManifest.xml
------------------------------------------------------------------------------------
    <!-- 권한 그룹 : CAMERA -->
    <uses-permission android:name="android.permission.CAMERA"/>

    <!-- 권한 그룹 : STORAGE-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>