I'm trying to display the image in ImageView
received from Camera Intent
, but the ImageView displays an empty image.
It shows error saying ImageView unable to open content, and failed to create image decoder with message 'unimplemented'
W/ImageView: Unable to open content: content://com.example.mobilee_commerceapp/my_images/JPEG_20211230_214226_1746483040936834961.jpg
android.graphics.ImageDecoder$DecodeException: Failed to create image decoder with message 'unimplemented'Input contained an error.
Below is the code:
private fun dispatchTakePictureIntent() {
// Create the File where the photo should go
val photoFile: File? = try {
createImageFile()
} catch (ex: IOException) {
// Error occurred while creating the File
null
}
photoFile?.also {
Log.d(TAG, "Success creating file")
Log.d(TAG, "PATH is " it.absolutePath)
cameraPhotoURI = FileProvider.getUriForFile(
requireContext(),
"com.example.mobilee_commerceapp",
it
)
}
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
getCameraResult.launch(takePictureIntent)
}
getCameraResult(). cameraPhotoURI is global variable.
private val getCameraResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
binding.profilePicIv.setImageURI(cameraPhotoURI)
}
}
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mobilee_commerceapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera"
android:required="false"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.mobilee_commerceapp"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths">
</meta-data>
</provider>
CodePudding user response:
Manifest file
<manifest package="your.package.name">
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
</manifest>
add for android 10 :
android:requestLegacyExternalStorage="true"
button click code
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
onActivityResult
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)
{
Bitmap photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);
}
CodePudding user response:
Find my solution is this post How to get Image URI by intent MediaStore.ACTION_IMAGE_CAPTURE in Android 10 and above. Followed its way and URI can be retrieved and set to imageView. Other solution is either outdated or not in kotlin.