com.android.camera.action.CROP устанавливает обои на Motorola Defy

Я работаю над приложением Android 2.1+ и пытаюсь сделать снимок, а затем отправить результаты этого намерения в функцию кадрирования. Кажется, он работает на Sony Ericsson xmp, но когда я помещаю его на Moto Defy, функция кадрирования не работает, потому что она, по-видимому, игнорирует имя файла, которое я ввел для данных, и вместо этого по какой-то причине смотрит на /data/data/com.motorola.gallery/files/temp-wallpaper. Это приводит к тому, что функция кадрирования не возвращает никаких данных, а только что сделанное изображение устанавливается в качестве обоев телефона! Вот пример кода:

public static final String SD_CARD_TEMP_DIR = Environment.getExternalStorageDirectory() + File.separator;
public static final String SD_CARD_TEMP_ORIG = SD_CARD_TEMP_DIR + "origPhoto.jpg";
public static final String SD_CARD_TEMP_CROP = SD_CARD_TEMP_DIR + "croppedPhoto.jpg";

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(Uri.fromFile(new File(Const.SD_CARD_TEMP_ORIG)), "image/*");
intent.putExtra("crop", true);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 512);
intent.putExtra("outputY", 512);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Const.SD_CARD_TEMP_CROP)));

Результат будет примерно таким:

INFO/ActivityManager(1242): Starting activity: Intent { act=com.android.camera.action.CROP dat=file:///sdcard/origPhoto.jpg typ=image/* cmp=com.motorola.gallery/.CropImage (has extras) }
INFO/ActivityManager(1242): Start proc com.motorola.gallery:CropImage for activity com.motorola.gallery/.CropImage: pid=25733 uid=10014 gids={1015, 9003, 9007, 9008, 2001, 3003}
WARN/CropImage(25733): CropImg mBitmap was null, retreive frm URIfile:///sdcard/origPhoto.jpg
ERROR/CropImage(25733): got IOException java.io.FileNotFoundException: /data/data/com.motorola.gallery/files/temp-wallpaper 
INFO/ActivityManager(1242): Displayed activity com.motorola.gallery/.CropImage: 5664 ms (total 5664 ms)
WARN/System.err(25672): java.io.FileNotFoundException: /sdcard/croppedPhoto.jpg
DEBUG/(25672): unable to unlink '/sdcard/croppedPhoto.jpg': No such file or directory (errno=2)

Есть ли у кого-нибудь опыт работы с этой проблемой или идеи для решения проблемы?


person Elroid    schedule 18.04.2011    source источник
comment
@Elrond: Действие com.android.camera.action.CROP Intent не является частью Android SDK. Нет гарантии, что он будет работать на любом устройстве.   -  person CommonsWare    schedule 19.04.2011
comment
Я сталкивался с этим в другом месте, поэтому я хотел знать, есть ли альтернативная работа?   -  person Elroid    schedule 19.04.2011
comment
Напишите себе задание по обрезке изображений. Или посмотрите, написал ли кто-нибудь уже тот, который доступен как открытый исходный код.   -  person CommonsWare    schedule 19.04.2011
comment
По теме: Проблема с обрезкой изображения на Droid X   -  person blahdiblah    schedule 05.03.2013


Ответы (1)


Я бы держался подальше от намерения, которое вы используете, потому что оно нестандартно и может не поддерживаться везде,

Судя по дополнительным данным, которые вы используете, я считаю, что вы делаете кадрирование фиксированного размера и не требует ввода данных пользователем. Это делает решение довольно простым, если у вас не заканчивается память.

  1. Загрузите изображение с помощью BitmapFactory.decodeFile. Вы можете передать объект BitmapFactory.options, чтобы дополнительно масштабировать изображение во время загрузки.
  2. Создайте обрезанное растровое изображение с помощью Bitmap.createBitmap (источник растрового изображения, int x, int y, int width, int height)
  3. Запишите его на диск с помощью Bitmap.compress
person Phil Lello    schedule 24.04.2011
comment
Это обрезка фиксированного размера, но это не значит, что мне не нужен пользовательский ввод. Пользователя просят расположить и / или изменить размер области кадрирования в соответствующем месте изображения. Как бы то ни было, в итоге я использовал решение, описанное на walletapp.net/crop-image, которое работает удовольствие! - person Elroid; 27.04.2011
comment
@Elroid Эта ссылка испорчена, но все еще доступна через Wayback Machine: http://web.archive.org/web/20120219104844/http://www.walletapp.net/crop-image, который ссылается на это репозиторий github: github.com/biokys/cropimage - person blahdiblah; 05.03.2013