===== 1. GetContent() 로 만들기 =====
==== 가. 파일 대화 상자 불러 오기 ====
다음 함수가 파일을 대화상자를 불러오는 함수이다.
val pickPictureLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.GetContent())
{ hwpUri ->
if (hwpUri != null) {
// Update the state with the Uri
}
}
==== 나. 호출하기 ====
다음의 방식으로 호출한다.
pickPictureLauncher.launch("image/*")
===== 2. 문서를 불러오기 =====
문서는 OpenDocument()로 호출한다.
val pickPictureLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.OpenDocument())
{ hwpUri ->
if (hwpUri != null) {
// Update the state with the Uri
}
}
===== 3. 다양한 mime를 호출하기 =====
다음과 같이 하면 GetContent()에 mime 제한자를 멀티플로 변경할 수 있다.
class GetContentWithMultiFilter:ActivityResultContracts.GetContent() {
override fun createIntent(context: Context, input:String): Intent {
val inputArray = input.split(";").toTypedArray()
val myIntent = super.createIntent(context, arrayOf("*/*"))
myIntent.putExtra(Intent.EXTRA_MIME_TYPES, inputArray)
return myIntent
}
}
===== 4. 실 사용례 =====
다음은 실제 사용례이다.
val pickPictureLauncher = rememberLauncherForActivityResult(
ActivityResultContracts.OpenDocument())
{ hwpUri ->
if (hwpUri != null) {
// Update the state with the Uri
name = hwpUri.path.toString()
val file: File = File(hwpUri.getPath()) //create path from uri
val split = file.path.split(":".toRegex()).dropLastWhile { it.isEmpty() }
.toTypedArray() //split the path.
fname = split[1] //assign it to a string(your choice).
}
}
Column (modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally){
Image(painter = painterResource(id = imageResource),
contentDescription = result.toString())
Spacer(modifier = Modifier.height(16.dp))
Text(text = name, fontSize = 24.sp, modifier = Modifier
.fillMaxWidth()
.wrapContentWidth(align = Alignment.CenterHorizontally)
.padding(top = 16.dp))
Text(text = fname, fontSize = 24.sp, modifier = Modifier
.fillMaxWidth()
.wrapContentWidth(align = Alignment.CenterHorizontally)
.padding(top = 16.dp))
Button(onClick = { pickPictureLauncher.launch(arrayOf("application/msword", "application/pdf", "application/vnd.openxmlformats-officedocument.wordprocessingml.document")) } ) {
Text(text = stringResource(R.string.fileopen))
}
}