Почему Android Crop не является возвращением активности?
-
27-10-2019 - |
Вопрос
Я пытаюсь обрезать изображение из медиа -галереи. Я могу получить доступ к изображению, запустить инструмент по умолчанию и даже сохранить результат обрезанного изображения.
Тем не менее, намерение, которое я использую, просто не вернет никаких результатов, если обрезка была успешной.
Мой главный метод:
// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);
intent.setData(uri);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);
- Метод onActivityResult () -
// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "user cropped a photo");
signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
} else
Log.d(TAG, "user cancelled photo crop");
}
Если я откинусь из активности урожая, я успешно получу сообщение «Пользователь отменен фоторопый». Но если я обрезаю изображение, новое обрезанное изображение появится в целевом каталоге, но функция OnActivityResult () никогда не будет вызвана. Что дает?
Глядя на Logcat, я обнаружил, что каждый раз, когда я сохраняю обрезанное изображение, «Javabinder» жалуется «неудачная транзакция связующего». Я понимаю, что это каким -то образом связано с памятью, но обрезанный файл составляет всего 24 КБ размер.
Решение
Нашел проблему в этой проблеме. К сожалению, это ограничение Android.
Видеть Android Cropper не может выйти за рамки 256?
Я установил выход моего обрезанного изображения на 400x400. К сожалению, Cropper Android по умолчанию может сделать только 256x256. Это так расстраивает, особенно когда нет документации по ограничениям.
Другие советы
Вы звоните setResult(int)
(ссылка на сайт) в намерении урожая?
ОБНОВИТЬ:\
Отправка result_cancelled по умолчанию. Он всегда будет отправлен обратно, если вы не реализуете несколько вещей.
В вашем урожайном намерении, когда вы закончите редактирование (т.е. пользователь нажимает на кнопку Done или что -то подобное), часть этого процесса будет вызоваться setResult(RESULT_OK)
.
пример:
public void doneBTNPressed( View view ) {
if ( view.getId() == R.id.doneBTN ) {
this.isCropped = true;
}
}
@Override
protected void onPause() {
if ( this.isCropped ) {
setResult(RESUL_OK);
}
super.onPause();
}
Этот результат (result_ok, плюс другое целое число, которое вы указываете) передается обратно в вызывающую деятельность (при условии, что использовался startActivityForResult ()). Есть также несколько переопределения, в зависимости от ваших потребностей. В призванной (родительской) деятельности вам придется внедрить onActivityResultint,int,Intent)
Чтобы получить результат от выходящей деятельности.
В приведенной выше ссылке есть раздел под названием «Начальные действия и получение результатов», в котором объясняются многочисленные способы извлечения информации из выходящего действия.