파일 공유 설정

내 앱에서 다른 앱으로 파일을 안전하게 제공하려면 콘텐츠 URI 형식으로 파일에 대한 보안 핸들입니다. Android FileProvider 구성요소는 . 이 강의에서는 FileProvider를 앱에 구현하고 다른 앱에 제공할 파일을 지정할 수 있습니다.

참고: FileProvider 클래스는 AndroidX 핵심 라이브러리. 정보 자세히 알아보려면 종속 항목 선언.

FileProvider 지정

앱의 FileProvider를 정의하려면 매니페스트를 참조하세요 이 항목은 콘텐츠 URI 생성에 사용할 권한을 지정하고 앱이 공유할 수 있는 디렉터리를 지정하는 XML 파일의 이름입니다.

다음 스니펫은 매니페스트에 <provider> 요소가 포함되어 있습니다. FileProvider 클래스, 권한 및 XML 파일 이름:

<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 속성은 API가 생성한 콘텐츠 URI에 FileProvider입니다. 이 예에서 권한은 com.example.myapp.fileprovider입니다. 개인용 앱의 문자열 'fileprovider'가 포함된 android:package 값 추가됩니다. 자세히 알아보기 자세한 내용은 콘텐츠 URIandroid:authorities 속성

<meta-data> 하위 요소 <provider>는 원하는 디렉터리를 지정하는 XML 파일을 가리킵니다. 공유할 수 있습니다. android:resource 속성은 .xml 확장자로 대체되었습니다.이 파일의 콘텐츠는 다음 섹션에서 설명합니다.

공유 가능 디렉터리 지정

앱 매니페스트에 FileProvider를 추가한 후에는 공유하려는 파일이 포함된 디렉터리를 지정해야 합니다. 먼저 res/xml/ 디렉터리에 filepaths.xml 파일을 만듭니다. 하위 디렉토리가 있습니다. 이 파일에서 확인할 수 있습니다 다음 스니펫은 res/xml/filepaths.xml 또한 이 스니펫은 하위 디렉터리를 공유하는 방법을 보여줍니다. files/ 디렉터리의 파일 이름을 지정합니다.

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

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

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

참고: XML 파일을 사용해야만 원하는 디렉터리를 지정할 수 있습니다. 공유 프로그래매틱 방식으로 디렉터리를 추가할 수는 없습니다.

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

예를 들어FileProvider 코드 스니펫에 대해 살펴보고 default_image.jpg, FileProvider는 다음 URI:

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

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