Android无法在Honeycomb上取消选择Bitmap错误

时间:2011-06-23 21:34:20

标签: android android-3.0-honeycomb

我有一个应用程序,允许用户转到照片库并选择要用作头像的照片。除了Xoom之外,代码在任何地方都可以正常工作,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;
}

然后我使用以下代码获取Bitmap数据:

@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失败了吗?

编辑:为了让它更令人兴奋,这个相同的代码在常规Activity中的Honeycomb上运行良好。这个特殊问题发生在PreferencesActivity中。

1 个答案:

答案 0 :(得分:2)

我最近在尝试在onActivityResult方法中返回一个Bitmap时遇到了类似的问题。令人费解的是,以下代码适用于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);   

我希望这有助于某人。