티스토리 뷰

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

참고:


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함