Two weeks ago I faced a problem, I was storing a pdf file in internal storage and I wanted to share it via another apps like Gmail, or any other sharing app. When I tried to attach it to Gmail for example I got this error “Permission denied for the attachment“.
The problem is that data saved in internal storage isn’t accessible by other applications.
After a while I figured it out, that the solution is in Content Providers.
Content Providers have a lot of uses one of them is providing a way to share data with other apps.
In manifest we declare the content provider :
name attribute is my custom content provider class, authorities attribute is URI that identify data offered by the content provider, exported is true means that the content provider is available for other applications to use.
After that we create our CustomContentProvider :
Finally, We will use our custom content provider to share our pdf file :
CONTENT_URI means I am going to use content provider “content://” + provider’s_authority + “/” + absolute file path.
That will allow our app to share the pdf file.