기기에 있는 파일(PDF, 이미지 등)의 Uri를 가져오기
Search
🗂️

기기에 있는 파일(PDF, 이미지 등)의 Uri를 가져오기

생성일
2022/02/28 05:27
태그

기기에서 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도 같이 설정해준다.