파일 권한 얻기

redbird's home
둘러보기로 이동 검색으로 이동

파일 권한 얻기

AndroidManifest.xml

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

build.gradle.kts

buildFeatures {
    buildConfig = true
}


import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.Settings
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp

@Composable
fun ManageAllFilesPermissionScreen() {
    val context = LocalContext.current
    var hasPermission by remember { mutableStateOf(checkAllFilesPermission(context)) }

    // 권한 상태를 주기적으로 확인할 수 있는 효과
    LaunchedEffect(Unit) {
        while (true) {
            hasPermission = checkAllFilesPermission(context)
            kotlinx.coroutines.delay(1000) // 1초마다 확인
        }
    }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        if (hasPermission) {
            Text("모든 파일 액세스 권한이 부여되었습니다.")
        } else {
            Text("앱 사용을 위해 모든 파일 액세스 권한이 필요합니다.")
            Spacer(modifier = Modifier.height(16.dp))
            Button(onClick = {
                requestAllFilesPermission(context)
            }) {
                Text("권한 설정으로 이동")
            }
        }
    }
}

// 권한 부여 여부 확인
fun checkAllFilesPermission(context: android.content.Context): Boolean {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Android 11 (API 30) 이상
        Environment.isExternalStorageManager()
    } else {
        // Android 10 이하에서는 일반 READ/WRITE 권한으로 충분합니다.
        // 여기서는 예시를 위해 항상 true를 반환하거나 다른 권한 확인 로직을 추가할 수 있습니다.
        true 
    }
}

// 사용자에게 권한 요청 (설정 화면으로 이동)
fun requestAllFilesPermission(context: android.content.Context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // Android 11 (API 30) 이상
        val intent = Intent(
            Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
            Uri.parse("package:${context.packageName}")
        )
        context.startActivity(intent)
    }
    // Android 10 이하에서는 이 함수를 호출할 필요가 없습니다.
}