Get Image from gallery or Camera in android
Select Image from device
IntentChooser to get image from gallery
We need to create chooser intent to select image from device.
private fun openPickerNow() { val getIntent = Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI) getIntent.type = "image/*" startActivityForResult(Intent.createChooser(getIntent, "Select Image"), PICK_IMAGE) }
Get image from camera
var photoFile: File? = null //Global variable override fun openCamera() { Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent -> // Ensure that there's a camera activity to handle the intent takePictureIntent.resolveActivity(packageManager)?.also { // Create the File where the photo should go photoFile = try { AppUtils.createImageFile(baseContext) } catch (ex: IOException) { // Error occurred while creating the File null } // Continue only if the File was successfully created photoFile?.also { val photoURI: Uri = FileProvider.getUriForFile(this, "$packageName.fileprovider", it) takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI) startActivityForResult(takePictureIntent, CAPTURE_IMAGE) } } } }
utils methods to create temp image file, get real path from uri
@Throws(IOException::class) fun createImageFile(context: Context): File { // Create an image file name val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date()) val storageDir: File? = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) return File.createTempFile( "JPEG_${timeStamp}_", /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ).apply { // Save a file: path for use with ACTION_VIEW intents return File(absolutePath) } } fun getRealPathFromUri(contentUri: Uri, context: Context): String? { var cursor: Cursor? = null return try { val proj = arrayOf(MediaStore.Images.Media.DATA) cursor = context.contentResolver.query(contentUri, proj, null, null, null) assert(cursor != null) val column_index: Int = cursor!!.getColumnIndexOrThrow(proj[0]) cursor.moveToFirst() cursor.getString(column_index) } finally { if (cursor != null) { cursor.close() } } }
handle result when image selected from camera or gallery
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when(requestCode){ PICK_IMAGE -> { if (data == null || data.data == null) { Snackbar.make( cdlSnack, getString(R.string.image_not_selected), Snackbar.LENGTH_SHORT ).show() return } val path = AppUtils.getRealPathFromUri(data.data!!, baseContext) ?: return val file = File(path) //We can upload file now } CAPTURE_IMAGE -> { if (photoFile != null){ //Here we can upload file } } } }
Share this content: