Is it possible to have a FileProvider available to other applications ?
manifest.xml
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:exported="true"
android:grantUriPermissions="false"
android:permission="com.example.filesvisible.permission.READ" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filespath" />
</provider>
...
From the doc:
false: The provider is not available to other applications. Set android:exported="false" to limit access to the provider to your applications. Only applications that have the same user ID (UID) as the provider will have access to it.
I've tried to set exported to true but I got this exception
Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported
Why I can't export a FileProvider ?
Yes. That is usually the point.
Because that is not how you use a
FileProvider
.The point behind
FileProvider
is to give select access to files to third-party apps. You can do this byFLAG_GRANT_READ_URI_PERMISSION
and/orFLAG_GRANT_WRITE_URI_PERMISSION
, in theIntent
that you use to pass one of your provider'sUri
values to the third-party app (e.g., via anACTION_VIEW
Intent
used withstartActivity()
).Also see the training guide on sharing files.