android Камера телефона 9 и 10 не запускается с выбранным намерением - PullRequest
0 голосов

Нужна помощь, пожалуйста! Это занятие по выращиванию урожая. Это действие отлично работает на телефонах Android 5–8, но камера не запускается на телефонах Android 9 и 10. В чем причина этого? Заранее спасибо!

  public void onLoadImageClick(View view) {
    startActivityForResult(getPickImageChooserIntent(), 100);
}

public void onCropImageClick(View view) {
    Bitmap cropped = mCropImageView.getCroppedImage(500, 500);
    if (cropped != null) {
        mCropImageView.setImageBitmap(cropped);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {

        Uri imageUri = getPickImageResultUri(data);
        boolean requirePermissions = false;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
                checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED &&
                isUriRequiresPermissions(imageUri)) {

            requirePermissions = true;
            mCropImageUri = imageUri;
            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
        }
        if (!requirePermissions) {
            mCropImageView.setImageUriAsync(imageUri);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (mCropImageUri != null && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        mCropImageView.setImageUriAsync(mCropImageUri);
    } else {
        Toast.makeText(this, "Required permissions are not granted", Toast.LENGTH_LONG).show();
    }
}

public Intent getPickImageChooserIntent() {
    Uri outputFileUri = getCaptureImageOutputUri();

    List<Intent> allIntents = new ArrayList<>();
    PackageManager packageManager = getPackageManager();

    Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for (ResolveInfo res : listCam) {
        Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        intent.setPackage(res.activityInfo.packageName);
        if (outputFileUri != null) {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        }
        allIntents.add(intent);
    }

    Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
    galleryIntent.setType("image/*");
    List<ResolveInfo> listGallery = packageManager.queryIntentActivities(galleryIntent, 0);
    for (ResolveInfo res : listGallery) {
        Intent intent = new Intent(galleryIntent);
        intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        intent.setPackage(res.activityInfo.packageName);
        allIntents.add(intent);
    }
    Intent mainIntent = allIntents.get(allIntents.size() - 1);
    for (Intent intent : allIntents) {
        if (Objects.requireNonNull(intent.getComponent()).getClassName().equals("com.android.documentsui.DocumentsActivity")) {
            mainIntent = intent;
            break;
        }
    }
    allIntents.remove(mainIntent);
    Intent chooserIntent = Intent.createChooser(mainIntent, "Select source");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, allIntents.toArray(new Parcelable[allIntents.size()]));
    return chooserIntent;
}

private Uri getCaptureImageOutputUri() {
    Uri outputFileUri = null;
    File getImage = getExternalCacheDir();
    if (getImage != null) {
        outputFileUri = Uri.fromFile(new File(getImage.getPath(), "pickImageResult.jpeg"));
    }
    return outputFileUri;
}

public Uri getPickImageResultUri(Intent data) {
    boolean isCamera = true;
    if (data != null && data.getData() != null) {
        String action = data.getAction();
        isCamera = action != null && action.equals(MediaStore.ACTION_IMAGE_CAPTURE);
    }
    return isCamera ? getCaptureImageOutputUri() : data.getData();
}

public boolean isUriRequiresPermissions(Uri uri) {
    try {
        ContentResolver resolver = getContentResolver();
        InputStream stream = resolver.openInputStream(uri);
        assert stream != null;
        stream.close();
        return false;
    } catch (FileNotFoundException e) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (e.getCause() instanceof ErrnoException) {
                return true;
            }
        }
    } catch (Exception ignored) {
    }
    return false;
}

Нужна помощь, пожалуйста! Это занятие по выращиванию урожая. Это действие отлично работает на телефонах Android 5-8, но камера не запускается на телефонах Android 9 и 10. В чем причина этого? Заранее спасибо!

...