Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

파일 공유 설정

앱에서 다른 앱으로 파일을 안전하게 제공하려면 파일에 보안 핸들을 콘텐츠 URI 형태로 제공하도록 앱을 구성해야 합니다. Android FileProvider 구성요소에서는 개발자가 XML에서 제공하는 사양에 따라 파일의 콘텐츠 URI를 생성합니다. 이 과정에서는 FileProvider의 기본 구현을 앱에 추가하는 방법과 다른 앱에 제공할 파일을 지정하는 방법을 보여줍니다.

참고: FileProvider 클래스는 AndroidX 핵심 라이브러리의 일부입니다. 이 라이브러리를 애플리케이션에 포함하는 방법에 관한 자세한 내용은 종속 항목 선언을 참조하세요.

FileProvider 지정

앱의 FileProvider를 정의하려면 매니페스트에 항목이 있어야 합니다. 이 항목을 통해 콘텐츠 URI 생성에 사용할 권한을 지정합니다. 또한 앱이 공유할 수 있는 디렉터리를 지정하는 XML 파일의 이름도 지정합니다.

다음 스니펫에서는 FileProvider 클래스, 권한 및 XML 파일 이름을 지정하는 <provider> 요소를 매니페스트에 추가하는 방법을 보여줍니다.

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapp">
        <application
            ...>
            <provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="com.example.myapp.fileprovider"
                android:grantUriPermissions="true"
                android:exported="false">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/filepaths" />
            </provider>
            ...
        </application>
    </manifest>

이 예에서 android:authorities 속성은 FileProvider에서 생성한 콘텐츠 URI에 사용할 URI 권한을 지정합니다. 이 예에서 권한은 com.example.myapp.fileprovider입니다. 자체 앱에서 'fileprovider' 문자열이 추가된 앱의 android:package 값으로 구성된 권한을 지정하세요. 권한 값에 관해 자세히 알아보려면 콘텐츠 URI 주제와 android:authorities 속성 관련 문서를 참조하세요.

<provider><meta-data> 하위 요소는 공유하려는 디렉터리를 지정하는 XML 파일을 가리킵니다. android:resource 속성은 이 파일의 경로 및 이름으로, .xml 확장자는 없습니다. 이 파일의 콘텐츠는 다음 섹션에 설명되어 있습니다.

공유 가능 디렉터리 지정

앱 매니페스트에 FileProvider를 추가했으면 공유하려는 파일이 포함된 디렉터리를 지정해야 합니다. 디렉터리를 지정하려면 먼저 프로젝트의 하위 디렉터리 res/xml/filepaths.xml 파일을 만듭니다. 이 파일에서 각 디렉터리의 XML 요소를 추가하여 디렉터리를 지정합니다. 다음 스니펫은 res/xml/filepaths.xml의 콘텐츠 예를 보여줍니다. 또한 이 스니펫에서는 내부 저장소 영역에 있는 files/ 디렉터리의 하위 디렉터리를 공유하는 방법을 보여줍니다.

    <paths>
        <files-path path="images/" name="myimages" />
    </paths>

이 예에서는 <files-path> 태그를 통해 앱 내부 저장소의 files/ 디렉터리 내에 있는 여러 디렉터리를 공유합니다. path 속성을 통해 files/images/ 하위 디렉터리를 공유합니다. name 속성은 경로 세그먼트 myimagesfiles/images/ 하위 디렉터리에 있는 파일의 콘텐츠 URI에 추가하도록 FileProvider에 지시합니다.

<paths> 요소에는 하위 요소가 여러 개 있을 수 있으며, 각 하위 요소는 공유할 다양한 디렉터리를 지정합니다. <files-path> 요소 외에도 <external-path> 요소를 사용하여 외부 저장소에 있는 디렉터리를 공유하고 <cache-path> 요소를 사용하여 내부 캐시 디렉터리에 있는 디렉터리를 공유할 수 있습니다. 공유 디렉터리를 지정하는 하위 요소에 관해 자세히 알아보려면 FileProvider 참조 문서를 확인하세요.

참고: XML 파일은 공유하려는 디렉터리를 지정할 수 있는 유일한 방법입니다. 프로그래매틱 방식으로 디렉터리를 추가할 수 없습니다.

이제 앱 내부 저장소의 files/ 디렉터리에 있는 파일 또는 files/의 하위 디렉터리에 있는 파일의 콘텐츠 URI를 생성하는 FileProvider의 완전한 사양이 있습니다. 앱에서 파일의 콘텐츠 URI를 생성할 때 이 URI에는 <provider> 요소에 지정된 권한(com.example.myapp.fileprovider), myimages/ 경로 및 파일 이름이 포함됩니다.

예를 들어 이 과정의 스니펫에 따라 FileProvider를 정의하고 default_image.jpg 파일의 콘텐츠 URI를 요청하면 FileProvider는 다음 URI를 반환합니다.

    content://com.example.myapp.fileprovider/myimages/default_image.jpg

추가 관련 정보는 다음을 참조하세요.