기기에서 PDF 파일 가져오기
기기에서 PDF를 가져오려면 권한 체크가 필요하다.
val permissionCheck =
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
PERMISSION_CODE
)
return
}
Kotlin
복사
매니페스트에도 역시 명시해줘야 한다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Kotlin
복사
pdf를 가져와야 하는데,
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "application/pdf"
requestPDF.launch(intent)
Kotlin
복사
1회는 잘 가져와 진다. 다만, 가져온 PDF 파일의 Uri를 보관하며 앱을 사용할 때 언제든지 해당 파일을 열고 싶다면
java.lang.SecurityException: Permission Denial: opening provider com.android.externalstorage.ExternalStorageProvider from ProcessRecord{b50c0dd0 1682:net.niltok.doubleviewerforpdf/u0a405} (pid=1682, uid=10405) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
Kotlin
복사
위와 같은 에러가 발생한다.
한번 불러온 PDF에 지속적으로 접근하고 싶으면
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.type = "application/pdf"
requestPDF.launch(intent)
Kotlin
복사
Intent.ACTION_OPEN_DOCUMENT 로 사용하면 된다.
private val requestPDF =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
it.data?.data?.let { uri->
contentResolver.takePersistableUriPermission(it1uriIntent.FLAG_GRANT_READ_URI_PERMISSION )
}
}
Kotlin
복사
takePersistableUriPermission도 같이 설정해준다.