파일 권한 얻기
둘러보기로 이동
검색으로 이동
파일 권한 얻기
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 이하에서는 이 함수를 호출할 필요가 없습니다.
}