take photo in camera and send file to server in android(10 and 11)

Viewed 66

I want to send a photo from the gallery and the camera as a file to the server and I have used the library canhub but in the activityResult the data is null.

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {

            GALLERY_REQUEST_CODE -> {
                if (resultCode == Activity.RESULT_OK) {
                    data?.data?.let { uri ->
                        launchImageCrop(uri)
                    }
                }
            }
            CAMERA_REQUEST_CODE -> {
                if (resultCode == Activity.RESULT_OK) {
                    data!!.data?.let { uri ->

                        launchImageCrop(uri)
                    }
                }
            }
            CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE -> {
                val result = CropImage.getActivityResult(data)
                if (resultCode == Activity.RESULT_OK && requestCode == GALLERY_REQUEST_CODE) {

                    val file = File(Environment.getExternalStorageDirectory(), "read.me")
                    val uri = Uri.fromFile(file)
                    val auxFile = File(uri.path)
                    viewModel.getUserCardInfo(auxFile)
                } else {
                    (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE)
                   // val error = CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE
                   // toast(error)
                }

                if (resultCode == Activity.RESULT_OK && requestCode == CAMERA_REQUEST_CODE) {
                    val photo: Bitmap = result!!.bitmap
                    val mFile = context?.convertToFile(photo)
                    if (mFile != null) {
                        viewModel.getUserCardInfo(mFile)
                    }
                }else{

                        CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE
                }
            }

        }
    }

and

  private fun launchImageCrop(uri: Uri) {
    CropImage.activity(uri)
        .setGuidelines(CropImageView.Guidelines.ON)
        .setAspectRatio(1920, 1080)
        .setCropShape(CropImageView.CropShape.RECTANGLE)
        .start(requireContext(),this);
}

and add manifest

   android:requestLegacyExternalStorage="true"
1 Answers

Hi i faced a similar issue , please try this sometimes the problem is google are not allowing to use Environment.getExternalStorageDirectory()

This is the new way

ContextWrapper cw = new ContextWrapper(mContext);
File directory = cw.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
File file = new File(directory, "name_of_file");

Also please don't use android:requestLegacyExternalStorage="true", google might reject your app in playstore

Related