Android 7.0 응용 프로그램 간 파일 공유 방법
4441 단어 Android7.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 시스템 이 안전성 에 있어 계속 완 선 된 결과 입 니 다.
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 공유 파일 에 대한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 에서 PopupWindow 가 7.0 이후 에 적합 한 해결 을 자세히 설명 합 니 다.본 고 는 안 드 로 이 드 에서 PopupWindow 가 7.0 이후 에 적합 한 해결 을 상세 하 게 설명 하고 여러분 에 게 공유 합 니 다.구체 적 으로 다음 과 같 습 니 다. 필요:위의 그림 왼쪽 효과 와...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.