android fileprovider 예제

몇 주 전에 나는 안드로이드 폰의 PDF 리더 응용 프로그램에서 내부 PDF 파일을 여는 작업을 받았다. 나는 그것이 간단 할 것이라고 생각했지만, 상황이 복잡 밝혀졌다. FileProvider에 대한 Google의 문서는 혼란스럽고 구체적인 예가 부족한 것으로 판명되었습니다. 그럼에도 불구하고, 나는 이 문제를 해결하기 위해 ContentProvider를 사용해야 한다는 것을 알았다. 이 예제에서 태그는 앱의 내부 저장소의 파일/디렉터리 내에서 디렉터리를 공유합니다. 경로 특성은 파일/의 이미지/하위 디렉토리를 공유합니다. 이름 특성은 FileProvider에게 파일/이미지/하위 디렉터리에 있는 파일의 콘텐츠 URI에 경로 세그먼트 myimages를 추가하도록 지시합니다. ContentProvider는 데이터를 캡슐화하고 다른 응용 프로그램에 제공하는 Android 구성 요소입니다. 여러 응용 프로그램 간에 데이터를 공유해야 하는 경우에만 필요합니다. 예를 들어 연락처 데이터는 ContentProvider의 하위 클래스인 ContactsProvider를 사용하여 다른 응용 프로그램과 공유됩니다.

파일 공급자 #getUriForFile()는 대부분의 작업을 수행합니다. 공유할 콘텐츠를 나타내는 File 개체를 전달하고 정의한 공급자 경로에 따라 콘텐츠 URI를 만듭니다. 이 경우 `pdf-sample.pdf`라는 파일을 공유하고 생성되는 콘텐츠 URI는 content://com.stylingandroid.fileprovider/my_files/pdf-sample.pdf. 이 예제에서 android:authority 특성은 FileProvider에서 생성된 콘텐츠 URI에 사용할 URI 권한을 지정합니다. 이 예에서 권한은 com.example.myapp.fileprovider입니다. 사용자 고유의 앱의 경우 앱의 android:package 값으로 구성된 권한을 “파일 공급자” 문자열이 추가된 권한을 지정합니다. 기관 값에 대한 자세한 내용은 주제 콘텐츠 URI 및 android:authority 특성에 대한 설명서를 참조하세요. YourActivity.java: 이 예제에서는 비디오 플레이어 앱에서 파일을 열고 싶습니다. 우리는 기본 FileProvider 또는 우리가 이전에 만든 우리의 사용자 정의 파일 공급자를 사용합니다. 컨텍스트의 경우 활동 내에 있는 경우 이 것을 사용할 수 있습니다. grantUriPermission를 호출하고 의도에 적절한 플래그를 추가해야합니다. 예를 들어 이름 값이 “공유”인 경우 FileProvider uri는 content:///share/abc.png와 같아야 합니다.

이렇게 하면 실제 로컬 파일 경로가 다른 앱에 노출되지 않습니다. 이제 앱의 내부 저장소의 파일/디렉터리 또는 파일/의 하위 디렉터리의 파일에 대한 콘텐츠 URI를 생성하는 FileProvider의 전체 사양이 있습니다. 앱에서 파일에 대한 콘텐츠 URI를 생성할 때 요소(com.example.myapp.fileprovider), 경로 myimages/및 파일 이름에 지정된 권한이 포함됩니다. FileProvider의 기본 기능에는 파일에 대한 콘텐츠 URI 생성이 포함되어 있으므로 코드에서 하위 클래스를 정의할 필요가 없습니다. 대신 XML에 전적으로 지정하여 앱에 FileProvider를 포함할 수 있습니다. FileProvider 구성 요소 자체를 지정하려면 앱 매니페스트에 요소를 추가합니다.