Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 유튜브
- 레트로핏
- 안스
- 안드로이드
- RecyclerView
- viewpager
- 코틀린
- 깃헙
- error
- Kotlin
- dart
- studio
- build
- 에러
- Android
- Github
- MVVM
- 스튜디오
- 웹뷰
- GIT
- coroutine
- image
- Gradle
- Retrofit
- 코루틴
- 의존성주입
- 안드로이드 스튜디오
- WebView
- ADB
- 안드로이드스튜디오
Archives
- Today
- Total
코딩하는 일용직 노동자
파일공유시 FileProvider 이용하기. 본문
# 파일공유시 FileProvider 이용하기. FileUriExposedException 해결.
Android 7.0(Nougat / API 24)에서 Intent로 URI 파일 경로 전송시
"file://" 이런식으로 구현되어있으면 FileUriExposedException 오류가 발생하게 되고 앱이 종료됩니다.
앱간 파일을 공유하려면 "file://" 대신 "content://"로 URI를 보내야 합니다.
URI로 데이터를 보내기 위해선 FileProvider 를 이용해야 합니다.
# 소스파일
var file = File(Environment.getExternalStorageDirectory().path + "/PickNPick/" + it.name)
var uri = FileProvider.getUriForFile(this, "com.aj.pickandpick.fileProvider", file)
Timber.d("Lee uri : $uri")
var intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(uri, "application/pdf")
intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
try {
startActivity(intent)
} catch (e: Exception) {
e.printStackTrace()
showCenterToast("PDF 파일을 보는데 실패하였습니다.")
}
# xml/provider_files
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path
name="cache"
path="." /> <!--Context.getCacheDir() 내부 저장소-->
<files-path
name="files"
path="." /> <!--Context.getFilesDir() 내부 저장소-->
<external-path
name="external"
path="."/> <!-- Environment.getExternalStorageDirectory() 외부 저장소-->
<external-cache-path
name="external-cache"
path="."/> <!-- Context.getExternalCacheDir() 외부 저장소-->
<external-files-path
name="external-files"
path="."/> <!-- Context.getExternalFilesDir() 외부 저장소-->
</paths>
# manifest 에서 아래처럼 설정.
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.aj.pickandpick.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_files"
tools:replace="android:resource"/>
</provider>
'안드로이드' 카테고리의 다른 글
IntentReceiver components are not allowed to register to receive intents (0) | 2020.04.29 |
---|---|
BootstrapMethodError 해결. (0) | 2020.04.29 |
JVM target 오류 수정. (0) | 2020.04.29 |
screenOrientation 빨간줄 표시 없애기. (0) | 2020.04.29 |
when 에 노란줄 없애기 (0) | 2020.04.29 |