Android

[ANDROID] 안드로이드 android.support.v4.content.FileProvider 에러가 발생하는 경우(클래스 찾을 수 없을 때) 해결하는 방법

AndroidManifest.xml 파일에 파일처리가 필요할 때 혹은 파일 공유 기능을 구현할 때 provider 태그를 추가를 하게 됩니다. FileProvider를 사용해서 처리할 수 있기 때문입니다. SDK 24 누가 버전부터는 android.os.FileUriExposedException오류를 해결하기위해 사용됩니다. 최근에 새롭게 프로젝트를 생성했거나 이전 프로젝트를 androidX로 마이그레이션 했다면 또는 AppCompat를 사용중인 경우 android:support.v4.content.FileProvider 클래스는 사용될 수 없습니다. 해당 클래스를 androidX에서 사용하는 클래스가 아니기 때문입니다. androidX를 사용하지 않고 compile “com.android.support:support-v4:SDK버전” 과 같이 support-v4를 사용하여 import android.support.v4.content.FileProvider 해서 해결할 수도 있습니다. 그러나 안드로이드X 라이브러리를 사용해야한다면 다음과 같이 처리하세요.

 

AndroidManifest.xml 파일에 추가한 provider

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="{applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/fileprovider"/>
        </provider>

android.support.v4.content.FileProvider 클래스를 대신 androidX용 라이브러리를 사용하여 해결할 수 있습니다.

androidx.core.content.FileProvider 클래스를 사용하세요.

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="{applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/fileprovider"/>
        </provider>

android:resource 태그의 값으로 지정된 @xml/fileprovider는 res폴더안에 xml폴더 생성 후 추가된 fileprovider.xml 파일을 의미합니다.

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path path="Android/data/${applicationId}/" name="files_root" />
    <root-path name="root" path="/" />

</paths>

 

[REFERENCE]

stackoverflow.com/questions/48534293/android-support-v4-content-fileprovider-not-found

 

[연관 정보]

developer.android.com/jetpack/androidx?hl=ko

 

AndroidX 개요  |  Android 개발자  |  Android Developers

androidx 네임스페이스 내의 아티팩트가 Android Jetpack 라이브러리를 구성합니다. androidx 네임스페이스에 있는 라이브러리는 지원 라이브러리와 마찬가지로 Android 플랫폼과 별도로 제공되며 출시 전

developer.android.com

developer.android.com/reference/androidx/core/content/FileProvider

 

FileProvider  |  Android 개발자  |  Android Developers

From class android.content.ContentProvider ContentProviderResult[] applyBatch(String arg0, ArrayList arg1) ContentProviderResult[] applyBatch(ArrayList arg0) void attachInfo(Context arg0, ProviderInfo arg1) int bulkInsert(Uri arg0, ContentValues[] arg1) Bu

developer.android.com

developer.android.com/training/secure-file-sharing/share-file?hl=ko

 

파일 공유  |  Android 개발자  |  Android Developers

콘텐츠 URI를 사용하여 파일을 공유하도록 앱을 설정하였으면 이 파일에 대한 다른 앱의 요청에 응답할 수 있습니다. 이 요청에 응답하는 한 가지 방법은 다른 애플리케이션에서 호출할 수 있는

developer.android.com

 

Leave a Reply

error: Content is protected !!