Android 7.0 응용 프로그램 간 파일 공유 방법

개발 에 서 는 그림 을 다른 프로그램 에 업로드 하거나 파일 이 서로 다른 저장 경로 사이 에 복사 붙 여 넣 는 등 파일 을 공유 해 야 하 는 경우 가 많 습 니 다.파일 을 받 는 애플 리 케 이 션 이 파일 을 제공 하 는 애플 리 케 이 션 에 요청 하 는 것 임 을 이해 할 수 있 습 니 다.
Android 7.0 부터 Android 는 StrictMode 정책 을 실행 하여 응용 프로그램 외부 공개file://URL를 금지 합 니 다.Android 7.0 이상 의 응용 프로그램 에서 FileProvider 를 사용 하지 않 으 면 FileUriExposedException 이상 을 던 집 니 다.Android 7.0 이후 에는 응용 프로그램 간 에 파일 을 공유 해 야 합 니 다.content://URL URL 임시 접근 권한 부여,즉,FileProvider 방식 으로 임시 접근 권한 을 부여 하려 면 임시 접근 권한 을 가 진 URL 이 안전 합 니 다.이 임시 URL 은 자동 으로 만 료 됩 니 다.그 중에서 FileProvider 가 제공 하 는 getUriForFile()은 파일 의 내용 을 만 드 는 데 사 용 됩 니 다.
모든 상황 에서 프로그램 에서 다른 프로그램 에 파일 을 제공 하 는 유일한 보안 방법 은 수신 프로그램 에 파일 의 내용 URI 를 보 내 고 이 URI 에 임시 접근 권한 을 부여 하 는 것 입 니 다.URI 를 받 는 프로그램 에 만 적용 되 고 자동 으로 만 료 되 기 때문에 임시 URI 접근 권한 이 있 는 콘 텐 츠 URI 는 안전 합 니 다.Android FileProvider 구성 요 소 는 getUriForFile()방법 을 제공 하여 파일 의 내용 URI 를 생 성 합 니 다.
여기 서도 Android 7.0 및 더 높 은 버 전에 서 자주 발생 하 는 이상 을 언급 할 수 있 습 니 다.FileUriExposedException 은 FileProvider 를 사용 하면 이 이상 을 해결 할 수 있 습 니 다.물론 이것 은 Android 시스템 이 안전성 에 있어 계속 완 선 된 결과 입 니 다.
  • FileProvider 지정
  • 파일 공유 경 로 를 지정 합 니 다.
  • 지정 한 FileProvider
    AndroidManifest 파일 에 Provider 를 지정 합 니 다.다음 을 참고 하 십시오.
    
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.myapp">
     <application
      ...>
      
      <!--android:authorities="${applicationId}.yourname"-->
      <provider
       android:name="android.support.v4.content.FileProvider"
       <!--authorities       FileProvider     URI URI  ,   applicationId.yourname"  -->
       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>
    파일 공유 경로 지정
    위 코드 에 meta-data 디 렉 터 리 에 공유 할 파일 디 렉 터 리 를 지정 하 였 습 니 다.파일 디 렉 터 리 는 filepathd.xml 에서 정의 되 며 해당 xml 에서 정의 할 수 있 는 경 로 는 다음 과 같 습 니 다.구체 적 으로 참고 하 십시오.
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <paths>
    
      <!--        (new File("/"))-->
      <root-path name="root" path="" />
      <!--  context.getFileDir()-->
      <files-path name="files" path="" />
      <!--  context.getCacheDir()-->
      <cache-path name="cache" path="" />
      <!--  Environment.getExternalStorageDirectory()-->
      <external-path name="external" path="" />
      <!--  context.getExternalFilesDirs()-->
      <external-files-path name="name" path="path" />
      <!--  getExternalCacheDirs()-->
      <external-cache-path name="name" path="path" />
    
     </paths>
    </resources>
    xml 에서 특정한 경 로 를 표시 하려 면 두 개의 속성 이 필요 합 니 다.path 는 현재 지정 한 디 렉 터 리 의 하위 디 렉 터 리 를 표시 합 니 다.지정 하지 않 으 면 현재 지정 한 디 렉 터 리 의 루트 디 렉 터 리 와 하위 디 렉 터 리 를 표시 합 니 다.name 은 name 에 추 가 된 URL 뒤 를 이 파일 의 접근 경로 로 표시 합 니 다.다음 을 참고 하 십시오.
    
    //             context.getFileDir()      images             
    <paths>
     <files-path path="images/" name="myImage" />
    </paths>
    
    //            URL
    content://com.example.myapp.fileprovider/myImage/image.jpg
    Uri 가 져 오기
    마지막 으로 설정 이 완료 되면 파일 을 사용 해 야 하 는 모든 것 은 Url 을 가 져 올 때 다음 과 같은 방식 으로 가 져 와 야 합 니 다.구체 적 으로 다음 과 같 습 니 다.
    
    public Uri getUri(File file) {
     Uri uri = null;
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
      uri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".youName", file);
     } else {
      uri = Uri.fromFile(file);
     }
     return uri;
    }
    이렇게 하면 안 드 로 이 드 7.0 이상 에서 파일 을 즐겁게 공유 할 수 있 는데 이 지식 도 개발 과정 에서 자주 볼 수 있 는 셈 이다.
    이상 은 안 드 로 이 드 7.0 응용 프로그램 간 에 파일 을 어떻게 공유 하 는 지 에 대한 상세 한 내용 입 니 다.안 드 로 이 드 7.0 공유 파일 에 대한 자 료 는 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기