There are times when you have to share one or more files with other apps? Let’s take an example. You might have to send images to image editors. On the other hand, you might also Copy & Paste files between external storage? The best way, in this case, is to send the file’s content URI to the receiving app. You can allow the receiving app with temporary access permissions to the file’s content URI.
Why is Content URI safe?
The reason for this is that the content URI only applies to the app that receives the URI. Once that has been done, it expires automatically. There are ways of generating a file’s content URI. One of them is the getUriForFile() method which is offered by Android FileProvider component.
In this article, we will talk about ways of securing sharing files between apps by using content URIs and temporary permissions. The content URIs will be generated by using the Android FileProvider component.
1) Set up file sharing
The first thing that you need to do in the process to configure the app to offer a secure way of file handling. This way will be in the form of Content URI.
As we have discussed earlier, FileProvider component is a great way of creating content URIs. It performs the specified task on the basis of the specifications you provide in XML. Let us spend some time to explore ways of adding the default implementation of FileProvider. We will also look at ideas of pointing to the files that have to be shared with other apps.
Steps:
- Specify the FileProvider
- Specify Sharable Directories
NOTE: FileProvider class is an element of the v4 Support Library.
1.1) Specify the FileProvider
To be able to use FileProvider for the app, you need to have an entry in the manifest. What does this entry do? There are a couple of things it specifies including authorizing its use for creation of content URIs and also specifies the XML file’s name which is used to specify the directories that the app can share.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demoapp">
<application
...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.demoapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>;
...
</application>;
</manifest>
|
As you can see in provided code snippet, you need to add the element of <provider> in order to specify the FileProvider class as also the authority.
android:authorities attribute is used to specify the URI authority. This is meant for those content URIs that are generated by the FileProider. In the provide code snippet, the authority is com.example.demoapp.fileprovider
<meta-data> is the child element of the <provider> element , it points to an XML file that specifies the directories we want to share.
For the specification of the file’s name and path, the android: resource attribute is used. This is sans the .xml extension.
Comments
Post a Comment