выбор фотографий из фотографий Google разрушает мое приложение - PullRequest
0 голосов
/ 16 февраля 2019

Я пишу приложение для Android на Java и должен позволить моим пользователям выбирать и обрезать изображения из галереи.Нет проблем при выборе изображения из любой родной галереи, но когда пользователь выбирает пожирать кадрирование или выбирает изображение из приложения Google Photos, приложение разбивается.

Я не могу понять, что является источником проблемыпоэтому любой ответ будет полезен

это код, который я использую
поля класса:

private Uri imageUri;

открытие камеры:

private void camOpen() {
    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File f = new File(Environment.getExternalStorageDirectory(), "file" + String.valueOf(System.currentTimeMillis()) + ".png");
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());

    imageUri = Uri.fromFile(f);
    i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    i.putExtra("return-data", true);
    startActivityForResult(i, CAMERA_CODE);
}

открытиегалерея:

private void galleryOpen() {
    Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(Intent.createChooser(i, "select file"), SELECT_PHOTO_CODE);
    }

обрезка изображения:

private void cropImage() {
    try {
        Intent cropIntent = new Intent("com.android.camera.action.CROP");
        cropIntent.setDataAndType(imageUri, "image/*");
        cropIntent.putExtra("crop", true);
        cropIntent.putExtra("aspectX", 1);
        cropIntent.putExtra("aspectY", 1);
        cropIntent.putExtra("return-data", true);
        startActivityForResult(cropIntent, CROP_CODE);

    } catch (Exception e) {}
}

обработчик результата:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CAMERA_CODE && resultCode == Activity.RESULT_OK) {
        cropImage();
    } else if (requestCode == SELECT_PHOTO_CODE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            imageUri = data.getData();
            cropImage();
        }
    } else if (requestCode == CROP_CODE && resultCode == Activity.RESULT_OK) {
        Bundle bundle = data.getExtras();
        Bitmap b = bundle.getParcelable("data");
        hasImageChanged=true;
        ivProfilePic.setImageBitmap(b);
        capturedImage = b;
    }
}

спасибо за любую полезную помощь ...

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

проблема была с целью урожая.В итоге я использовал библиотеку uCrop, и это устранило проблему.

0 голосов
/ 16 февраля 2019

Android не поддерживает функцию обрезки, потому что обрезка не является частью Android API. Поэтому я рекомендую использовать библиотеку

...