2 years ago
#7150

faizan
Android Scope storage - Download Images and store in Downloads directory
I updated my project to target sdk 31 from 28. I am downloading images from a url into a folder Download/MyMainFolder/folder1/folder2/iamge1.png.
The path I was setting in downloadmanager
setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,/MyMainFolder/folder1/folder2/iamge1.png )
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath + "/MyMainFolder/folder1/folder2/iamge1.png"
I created a method savePhotoToExternalStorage:
private fun savePhotoToExternalStorage(displayName: String, path:String) {
//here path is =
//Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolute//Path + "/MyMainFolder/folder1/folder2/iamge1.png"
val imageCollection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else MediaStore.Images.Media.EXTERNAL_CONTENT_URI
val contentValues = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, displayName)
put(MediaStore.Images.Media.MIME_TYPE, "image/png")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
put(MediaStore.Images.Media.RELATIVE_PATH, path)
}
}
try {
val insert = context?.contentResolver?.insert(imageCollection, contentValues)
Log.d(TAG, "Insert $insert")
}catch (e: IOException) {
e.printStackTrace()
}
}
Here is my retrieve all images data which is working on android 11 but not on Android 10:
fun getAllImages(context: Context): MutableList<String> {
val TAG = ImageManager::class.java.simpleName
val imagesColumns = arrayOf(MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_TAKEN)
val imagesOrderBy = MediaStore.Images.Media.DATE_TAKEN + " DESC"
/*this query retrieves images from external memory and load in Cursor */
val imageCollection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else MediaStore.Images.Media.EXTERNAL_CONTENT_URI
Log.d(TAG, "getAllImages: imageCollection $imageCollection")
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_TAKEN
)
val imagesCursor = context.contentResolver.query(imageCollection, imagesColumns, null, null, imagesOrderBy)
val fileNames = mutableListOf<String>()
imagesCursor?.let {
val imagesCount = imagesCursor.count
for (i in 0 until imagesCount) {
it.moveToPosition(i)
val dataColumnIndex = it.getColumnIndex(MediaStore.Images.Media.DATA)
fileNames.add(it.getString(dataColumnIndex))
}
}
imagesCursor?.close()
return fileNames
}
android
storage
android-10.0
android-11
scoped-storage
0 Answers
Your Answer