fileprovider 예제

August 2, 2019 at 6:18 pm

이전 시리즈의 기사에서는 DownloadManager를 살펴보았고 DownloadManager가 실제로 다운로드한 콘텐츠를 다른 앱과 공유하는 것을 처리하는 것을 보았습니다. 그러나 실제로이 작업을 수행해야하고 DownloadManager를 사용하지 않는 경우 어떻게해야합니까? 이러한 것들에 대한 일반적인 경우는 우리가 다른 응용 프로그램과 콘텐츠를 공유하거나, 이전 시리즈의 예에서와 같이, 콘텐츠는 우리의 응용 프로그램이 지원하지 않는 형식이었기 때문에 우리는 장치의 다른 응용 프로그램에 해당 콘텐츠의 표시를 연기하고 싶었다 hich는 콘텐츠 유형을 지원했습니다 – 예에서 이것은 PDF였습니다. 이 기사에서는 이것이 문제가 될 수있는 이유를 살펴보고 FileProvider를 통해 필요한 것을 정확하게 수행 할 수 있습니다. 이 예제에서 공유 폴더 정의 xml 파일 이름은 shared_file_paths.xml이며, 아래는 내용입니다. 각 요소 설명에 대한 주석을 볼 수 있습니다. 콘텐츠 URI를 원하는 파일이 포함된 각 디렉터리마다 자식 요소를 지정해야 합니다. 예를 들어 이러한 XML 요소는 두 개의 디렉터리를 지정합니다: ContentProvider는 데이터를 캡슐화하고 다른 응용 프로그램에 제공하는 Android 구성 요소입니다. 여러 응용 프로그램 간에 데이터를 공유해야 하는 경우에만 필요합니다. 예를 들어 연락처 데이터는 ContentProvider의 하위 클래스인 ContactsProvider를 사용하여 다른 응용 프로그램과 공유됩니다.

예를 들어 이 단원의 코드 조각에 따라 FileProvider를 정의하고 파일 default_image.jpg에 대한 콘텐츠 URI를 요청하는 경우 FileProvider는 다음 URI를 반환합니다. 이 파일을 저장할 임시 장소로 외부 저장소를 저장합니다. 예를 들어 카메라 앱으로 사진을 찍어야 하는 경우 카메라 앱이 그림을 저장할 파일을 지정해야 하며 외부 저장소를 사용하는 것이 어려울 수 있습니다. 먼저 파일을 공유하는 것이 문제가 될 수있는 이유를 생각해 봅시다. 콘텐츠를 저장하는 가장 확실한 장소는 앱의 개인 저장소 영역(Context#openFileOutput()사용) 또는 내부 캐시(Context#getCacheDir(사용)입니다. 이 두 위치가 공유하는 한 가지 측면은 앱에서만 액세스할 수 있다는 것입니다. 보안에 적합할 수 있지만 PDF 예제와 같이 콘텐츠 표시를 다른 앱으로 연기하려는 경우 문제가 발생합니다. 이 문제를 극복하는 확실한 방법은 환경#getExternalStorageDirectory() 또는 환경#getDownloadCacheDirectory()와 같은 외부 저장소를 사용하는 것입니다. YourActivity.java: 이 예제에서는 비디오 플레이어 앱에서 파일을 열고 싶습니다.