Android не удалось отменить ошибку растрового изображения в сотовой сети - PullRequest
1 голос
/ 24 июня 2011

У меня есть приложение, которое позволяет пользователю перейти в фотогалерею и выбрать фотографию для использования в качестве аватара. Код работает везде, кроме Xoom, который запускает галерею, позволяет пользователю выбрать фотографию и затем завершается с ошибкой «java.lang.RuntimeException: Failed to unparcel Bitmap». Я использую следующий метод для вызова галереи:

public Intent getImagePickerIntent(int width, int height) {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("outputX", width);
    intent.putExtra("outputY", height);
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("scale", true);
    intent.putExtra("noFaceDetection", true);
    intent.putExtra("setWallpaper", false);
    intent.putExtra("return-data", true);

    return intent;
}

А потом я получаю данные растрового изображения, используя следующий код:

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

    if(requestCode == PHOTO_PICKED) {
        // If the activity successfully captured a photo
        if(resultCode == Activity.RESULT_OK && data.getExtras() != null) {
            // Resize photo to 100x100 and then save to user's device
            try {
                // putting this in a try-catch after seeing odd exceptions on a Xoom
                ImageHelper.save(PrefsActivity.this, MyApplication.DEVICE_PHOTO_FILE_NAME, ImageHelper.resize((Bitmap)data.getExtras().getParcelable("data"), 100, 100));

Обратите внимание, что я получаю растровое изображение, звоня (Bitmap)data.getExtras().getParcelable("data")

Это нормально работает на Android 2.3 и ниже. Есть идеи, почему он не работает в 3.x?

РЕДАКТИРОВАТЬ : чтобы сделать его более захватывающим, этот же код прекрасно работает в Honeycomb в обычной деятельности. Эта конкретная проблема возникает в PreferencesActivity.

1 Ответ

2 голосов
/ 20 июля 2011

Недавно я столкнулся с подобной проблемой при попытке вернуть растровое изображение в методе onActivityResult.Необъяснимо, что следующий код работает в SDK 3, но не работает ни на что большее:

Bundle extras = intent.getExtras();                 
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("someImage");  

В качестве обходного пути я преобразовал растровое изображение в байтовый массив в операции, вызываемой startActivityForResult:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);            
intent.putExtra( "myByteArray", stream.toByteArray() );  

Вернувшись в onActivityResult, я извлекаю его с помощью:

byte[] myByteArray = intent.getExtras().getByteArray("myByteArray");

Затем я преобразую обратно в растровое изображение со следующим:

InputStream is = new ByteArrayInputStream(myByteArray);
Bitmap bmp = BitmapFactory.decodeStream(is);   

Надеюсь, это кому-нибудь поможет.

...