简体   繁体   中英

Camera intent is not working properly in android version 11

I have try some following solution to captured image on android version 11. But this solution are not working. when I use bitmap that time I get blur image this Is not visible properly.I have added the below code in the manifest.

  android:requestLegacyExternalStorage="true" ` Add this top stored image in external storage`
 <queries>
        <intent>`
            <action android:name="android.media.action.IMAGE_CAPTURE" />
        </intent>
    </queries>

// add code in class call image Intent 
 public static Intent getPickImageIntent(Context context) {
        mContext = context;
        Intent chooserIntent = null;

        List<Intent> intentList = new ArrayList<>();

        Intent pickIntent = new Intent(Intent.ACTION_PICK,
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      //  takePhotoIntent.putExtra("return-data", true);
      //  takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
        intentList = addIntentsToList(context, intentList, pickIntent);
        intentList = addIntentsToList(context, intentList, takePhotoIntent);

        if (intentList.size() > 0) {
            chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1),
                    context.getString(R.string.pick_image_intent_text));
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{}));
        }

        return chooserIntent;
    }
 when I add temp file path then this is not working in above API level 30 

 // pass image uri to activity set image in imageview     
public static Uri getImageFromResultUri(Context context, int resultCode,
                                            Intent imageReturnedIntent) {
        File imageFile = getTempFile(context);
        Uri selectedImage = null;
        int sdkVersion = Build.VERSION.SDK_INT;
        if (resultCode == Activity.RESULT_OK) {
                boolean isCamera = (imageReturnedIntent == null ||
                    imageReturnedIntent.getData() == null ||
                    imageReturnedIntent.getData().toString().contains(imageFile.toString()));
                if (isCamera) {     /** CAMERA **/
                   // selectedImage = Uri.fromFile(imageFile);
                    Bitmap photo = (Bitmap) imageReturnedIntent.getExtras().get("data");
                    selectedImage = getImageUri(context,photo);
                } else {            /** ALBUM **/
                    selectedImage = imageReturnedIntent.getData();
                }
        }

         return selectedImage;

    }
 
when I convert Bitmap image to URI
 public static Uri getImageUri(Context mContext, Bitmap inImage){
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG,100,bytes);
        String path = MediaStore.Images.Media.insertImage(mContext.getContentResolver(),inImage,"Title",null);
        return Uri.parse(path);
    }

when I convert the image bitmap to URI I get a thumbnail so this is a blur so how can I get an image in android version 11 without using a bitmap. And I don't what to store this image in the gallery. Image is getting blur in every device. When I use takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context))); this code then this is working properly in below version 11. but how can I use same code for android version 11

Uri.fromFile(getTempFile(context)));

You should use FileProvider and FileProvider.getUriForFile() instead to provide a valid uri to camera intent.

Also for versions below Android 11;

which is your target API version? requestLegacyExternalStorage will work only when targetting at most Android 10, when targetting Android 11 you have to use Scoped Storage , thus implement support for this feature. without this implementation you won't be able to access files outside your private app folder on Android 11+ devices

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM