यदि आपका ऐप Android N (7.0) और इसके बाद के संस्करण को लक्षित करता है, तो आपको ऊपर दिए गए उत्तर ("Uri.fromFile" विधि) का उपयोग नहीं करना चाहिए, क्योंकि यह आपके लिए काम नहीं करेगा।
इसके बजाय, आपको एक ContentProvider का उपयोग करना चाहिए।
उदाहरण के लिए, यदि आपकी छवि फ़ाइल बाहरी फ़ोल्डर में है, तो आप इसका उपयोग कर सकते हैं (मेरे द्वारा यहां बनाए गए कोड के समान ):
File file = ...;
final Intent intent = new Intent(Intent.ACTION_VIEW)
.setDataAndType(VERSION.SDK_INT >= VERSION_CODES.N ?
FileProvider.getUriForFile(this,getPackageName() + ".provider", file) : Uri.fromFile(file),
"image/*").addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
प्रकट:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
रेस / xml / provider_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="files_root"
path="Android/data/${applicationId}"/>
<external-path
name="external_storage_root"
path="."/>
</paths>
यदि आपकी छवि एप्लिकेशन के निजी पथ में है, तो आपको अपना खुद का ContentProvider बनाना चाहिए, जैसा कि मैंने लिंक पर "OpenFileProvider" बनाया है।