0

I was working on an app where i remove a portrait image's background (on-device) and download it upon being created. I have created the background removed bitmap of ARGB_8888 type and i was just about to convert it to a png and download it on the user's device, but even after running the download code, it keeps showing no such downloaded file when i check in my device's gallery but using Log statements i am able to see that the download has happened smoothly.

My button that listens to clicking event for downloading is :

downloadbtn.setOnClickListener { lifecycleScope.launch(Dispatchers.Default) { Log.v("BeforByteStream", "Inside download onclick coroutine") requestRuntimePermissions() // Permission already granted, proceed with downloading downloadToStorage(outputBitmapdnld) } } 

My downloading code from bitmap is :

private fun downloadToStorage(outputBitmapdnld: Bitmap) { val bytes = ByteArrayOutputStream().use { stream -> outputBitmapdnld.compress(Bitmap.CompressFormat.PNG, 100, stream) stream.toByteArray() } Log.v("AfterByteStream", "Successfully converted to Bytestream!") if (Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED) { // External storage is available //Toast.makeText(this@ImageStaging, "External storage is available!", Toast.LENGTH_SHORT).show() // Proceed with saving the image Log.v("InsideIf", "External storage is available!") val directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) Log.v("DirectoryAccess", "Directory successfully accessed!") val fileName = "bgremove69.png" val file = File(directory, fileName) if (!file.exists()) { file.createNewFile() } FileOutputStream(file).use { fos -> fos.write(bytes) } Log.v("FileWritten", "File is directly downloaded to folder supposedly...") } else { // External storage is not available Toast.makeText(this@ImageStaging, "External storage is not available", Toast.LENGTH_SHORT).show() } } 

I have successfully asked for image read and write storage permissions from my previous post : Android: Run Time Permissions not working - App Settings Showing No Requested Permissions even when asked for (WRITE_EXTERNAL_STORAGE)

Even after clicking on the download button and after getting the Log output saying "File is directly downloaded to folder supposedly...", I am still not finding the image in my downloads directory.

1 Answer 1

1

Use this code to save in the gallery :

 fun saveImage(image: Bitmap, url:(String) -> Unit): String? { var savedImagePath: String? = null val imageFileName = "JPEG_" + UUID.randomUUID().toString() + ".jpg" val storageDir = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) .toString() + "/zigap" ) var success = true if (!storageDir.exists()) { success = storageDir.mkdirs() } if (success) { val imageFile = File(storageDir, imageFileName) savedImagePath = imageFile.absolutePath try { val fOut: OutputStream = FileOutputStream(imageFile) image.compress(Bitmap.CompressFormat.JPEG, 100, fOut) fOut.close() } catch (e: Exception) { e.printStackTrace() } // Add the image to the system gallery url(savedImagePath) galleryAddPic(savedImagePath) //Toast.makeText(this, "IMAGE SAVED", Toast.LENGTH_LONG).show() // to make this working, need to manage coroutine, as this execution is something off the main thread } return savedImagePath } private fun galleryAddPic(imagePath: String?) { imagePath?.let { path -> val mediaScanIntent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) val f = File(path) val contentUri: Uri = Uri.fromFile(f) mediaScanIntent.data = contentUri MainRepository.application.sendBroadcast(mediaScanIntent) } } 
Sign up to request clarification or add additional context in comments.

1 Comment

I just modified this to download my png image, and it works.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.