सबसे पहले आपको एक प्रदाता को अपने AndroidManifest में जोड़ना होगा
<application
...>
<activity>
....
</activity>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.your.package.fileProvider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>
अब xml संसाधन फ़ोल्डर में एक फ़ाइल बनाएं (यदि Android स्टूडियो का उपयोग करके आप Alt_ Enter को हाइलाइट कर सकते हैं तो file_paths हाइलाइट करने के बाद xml संसाधन विकल्प बनाएँ)
File_paths फ़ाइल में अगला दर्ज करें
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="Android/data/com.your.package/" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>
यह उदाहरण बाहरी पथ के लिए है जिसे आप अधिक विकल्पों के लिए यहां रेफरी कर सकते हैं। यह आपको उन फ़ाइलों को साझा करने की अनुमति देगा जो उस फ़ोल्डर और उसके उप-फ़ोल्डर में हैं।
अब जो कुछ बचा है वह इरादा इस प्रकार बनाना है:
MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext = newFile.getName().substring(newFile.getName().lastIndexOf(".") + 1);
String type = mime.getMimeTypeFromExtension(ext);
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(getContext(), "com.your.package.fileProvider", newFile);
intent.setDataAndType(contentUri, type);
} else {
intent.setDataAndType(Uri.fromFile(newFile), type);
}
startActivityForResult(intent, ACTIVITY_VIEW_ATTACHMENT);
} catch (ActivityNotFoundException anfe) {
Toast.makeText(getContext(), "No activity found to open this attachment.", Toast.LENGTH_LONG).show();
}
EDIT : मैंने sd कार्ड के रूट फ़ोल्डर को file_paths में जोड़ा। मैंने इस कोड का परीक्षण किया है और यह काम करता है।