I write this function to PDFfile form URI but it throw 2 exception with Android 10 11 12.
From Firebase Crashlytics
45% Xiaomi 14% samsung 12% oneplus 12% realme
38% Android 11 34% Android 12 19% Android 10 7% Android 9
1)
java.lang.SecurityException: Permission Denial: reading com.whatsapp.contentprovider.MediaProvider uri content://com.whatsapp.provider.media/item/b1003092-8514-4d91-8600-3bbdb788c2bf from pid=21402, uid=10231 requires the provider be exported, or grantUriPermission()
java.lang.SecurityException: myApp.scanner.docs.pdf has no access to content://media/external/downloads/65407
Funtion
fun getPdfFileFromUri(activity: Context, pdfFileNames: Uri): File {
val myFile: File
var displayName: String? = null
val uriString = pdfFileNames.toString()
if (uriString.startsWith("content://")) {
var cursor: Cursor? = null
// following line responsible for crash 1
cursor = activity.contentResolver.query(pdfFileNames, null, null, null, null)
if (cursor != null && cursor.moveToFirst()) {
displayName =
cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
}
cursor?.close()
if (displayName == null) {
displayName = uriString.split("/")[uriString.split("/").size - 1]
}
myFile = File(activity.cacheDir, displayName)
val output = FileOutputStream(myFile)
// following line responsible for 2nd crash
val asset = activity.contentResolver.openInputStream(pdfFileNames)
val buffer = ByteArray(1024)
var size: Int
while (asset!!.read(buffer).also { size = it } != -1) {
output.write(buffer, 0, size)
}
asset.close()
output.close()
} else {
myFile = File(uriString)
}
return myFile
}