Android Canceling Crop 不返回活动结果

Posted

技术标签:

【中文标题】Android Canceling Crop 不返回活动结果【英文标题】:Android Canceling Crop does not return activity result 【发布时间】:2013-05-26 02:06:30 【问题描述】:

我可以从图库中挑选一张图片,将其裁剪并获取为bundle。我以这种方式检索它:

if (resultCode == Activity.RESULT_OK) 
      if (requestCode == SELECT_IMAGE || requestCode == SELECT_LANDSCAPE_IMAGE) 
           Bundle extras = data.getExtras();
           Bitmap photo = extras.getParcelable("data");
                .........................
      

一切正常。但是当我取消裁剪时,没有收到任何捆绑包。当我取消裁剪时,我想收到实际的位图。我该怎么做?

【问题讨论】:

如果他们取消了,它可能不会返回 RESULT_OK。 【参考方案1】:

我找到了解决办法:

if (requestCode == CROP_FROM_CAMERA && resultcode == RESULT_CANCELED 
  // crop was cancelled

【讨论】:

【参考方案2】:
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == AppConstant.PICK_PROFILE_PIC) 
        // getActivity();
        if (resultCode == Activity.RESULT_OK && data != null) 
            selectedImage = data.getData();
            String[] filePathColumn = MediaStore.Images.Media.DATA;

            Cursor cursor = getContentResolver().query(
                    selectedImage, filePathColumn, null, null, null);

            // some devices (OS versions return an URI of com.android
            // instead of com.google.android
            if (selectedImage.toString().startsWith(
                    "content://com.android.gallery3d.provider")) 
                // use the com.google provider, not the com.android
                // provider.
                selectedImage = Uri.parse(selectedImage.toString().replace(
                        "com.android.gallery3d",
                        "com.google.android.gallery3d"));
            

            if (cursor != null) 
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                if (selectedImage.toString().startsWith(
                        "content://com.google.android.gallery3d")) 
                    columnIndex = cursor
                            .getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
                    if (columnIndex != -1) 
                        new GetBitmap(getApplicationContext(), selectedImage)
                                .execute();
                    
                 else if (selectedImage.toString().startsWith(
                        "content://com.google.android.apps.photos.content")) 
                    new GetBitmap(getApplicationContext(), selectedImage).execute();
                 else 
                    cursor.moveToFirst();
                    mPicturePath = cursor.getString(columnIndex);
                    ImageUtils.rotateImage(getApplicationContext(), mPicturePath);
                    addGalleryImage(mPicturePath);
                
            
            cursor.close();
        
        performCrop();

     else if (requestCode == AppConstant.CLICK_IMAGE) 
        File f = new File(Environment.getExternalStorageDirectory()
                .toString());
        for (File temp : f.listFiles()) 
            if (temp.getName().equals(AppConstant.TEMP_IMAGE_NAME)) 
                f = temp;
                break;
            
        
        mPicturePath = f.toString();

        mBitmap = ImageUtils.rotateImage(this, mPicturePath);
        ImageUtils.setBitmapToView(mBitmap, mProfilePic);

       Toast.makeText(RegistrationActivity.this, mPicturePath + "", Toast.LENGTH_LONG).show();

     else if (requestCode == AppConstant.CROP_IMAGE && resultCode != RESULT_CANCELED) 
        // get the returned data
        Bundle extras = data.getExtras();
        // get the cropped bitmap

        Bitmap thePic = extras.getParcelable("data");
            // retrieve a reference to the ImageView

            // display the returned cropped image
            GraphicsUtil graphicUtil = new GraphicsUtil();
            // picView.setImageBitmap(graphicUtil.getRoundedShape(thePic,(float)1.5,92));
            mProfilePic.setImageBitmap(graphicUtil.getCircleBitmap(
                    thePic, 16));
        Toast.makeText(RegistrationActivity.this, mPicturePath + "", Toast.LENGTH_LONG).show();

    
    else if (requestCode == AppConstant.CROP_IMAGE && resultCode == RESULT_CANCELED) 
        Toast.makeText(RegistrationActivity.this, mPicturePath + "", Toast.LENGTH_LONG).show();

    

【讨论】:

以上是关于Android Canceling Crop 不返回活动结果的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Android 中使用 Android Crop 图像裁剪库

com.android.camera.action.CROP 在objective-c 中?

Android-crop:漂亮的图片裁切工具

调用 android 系统拍照结合 android-crop 裁剪图片

如何使用未指定输出大小的 com.android.camera.action.CROP?

使用“com.android.camera.action.CROP”意图裁剪图像,在某些设备上返回小尺寸位图