티스토리 뷰
AndroidManifest.xml 파일에 provider태그를 추가한다.
태그의 위치는 application 내부에 위치하도록 한다.
App의 Pacakage이름을 이용하여 authorities를 부여하는데
run 모드에 따라서 package 이름이 변경 될 수 있기 때문에
${applicationId}를 사용하여 이에 대한 문제를 해결한다.
(debug / Release 모드에서 app의 이름이 suffix가 붙는 경우)
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path" />
</provider>
공유할 내부 폴더의 위치를 res/xml/file_path.xml에 기록한다.
특정 파일 또는 특정 Directory 하위의 파일을 정하여 공유할 수도 있고
Runtime에서 파일이 동적으로 생성되거나 경로가 바뀌는 경우
내부 폴더의 root 폴더를 지정하면 하위 폴더의 파일들을 공유할 수 있다.
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<files-path path="/" name="default" />
</paths>
</paths>
앱을 호출하는 코드는 다음과 같다.
Uri uri = FileProvider.getUriForFile(MainActivity.this, getPackageName(), file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri, "image/*");
startActivity(intent);
file_path.xml에 따라서 path의 입력값이 name의 값으로 uri에 변환된다.
실제 내부 폴더의 path /data/data/test.test.myapp/files/temp.png
다른앱으로 전송되는 uri content://test.test.myapp/default/temp.png
'Programming > Android' 카테고리의 다른 글
[Android] Snackbar / SpannableString / TextInputLayout (0) | 2017.02.13 |
---|---|
[Android] Bitmap (inSampleSize) (0) | 2017.02.13 |
[Android] Bitmap (OutOfMemory Exception) (0) | 2017.02.13 |
Mac adb 위치 (0) | 2017.01.12 |
[Android] Internal/External storage 장단점 비교 (0) | 2016.08.12 |