如何使用OS Lollipop在java for Java中裁剪图像

时间:2015-03-18 02:09:25

标签: java image android-5.0-lollipop crop

我有以下用于裁剪图像的代码。它在Android版本4或OS Kitkat中完美运行,但它不适用于Android版本5或OS Lollipop。

我已经搜遍了整个世界,但无法找到答案...

这是我的代码:

在OS Kitkat中:此列表变量返回一个值。但是,
在OS Lollipop中:这个列表变量返回一个空的arraylist。

    final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>();

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getPackageManager().queryIntentActivities( intent, 0 );
    PackageManager test = getPackageManager();

    int size = list.size();

    if (size == 0) {            

        Toast.makeText(this, "Can not find image crop app", Toast.LENGTH_SHORT).show();

        return;
    } else {
        intent.setData(mCapturedImageURI);

        intent.putExtra("outputX", 110);
        intent.putExtra("outputY", 110);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);

        if (size == 1) {
            Intent i = new Intent(intent);
            ResolveInfo res = list.get(0);

            i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));

            startActivityForResult(i, CROP_FROM_CAMERA);
        } else {
            for (ResolveInfo res : list) {
                final CropOption co = new CropOption();

                co.title    = getPackageManager().getApplicationLabel(res.activityInfo.applicationInfo);
                co.icon     = getPackageManager().getApplicationIcon(res.activityInfo.applicationInfo);
                co.appIntent= new Intent(intent);

                co.appIntent.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));

                cropOptions.add(co);
            }

            CropOptionAdapter adapter = new CropOptionAdapter(getApplicationContext(), cropOptions);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose Crop App");
            builder.setAdapter( adapter, new DialogInterface.OnClickListener() {
                public void onClick( DialogInterface dialog, int item ) {
                    startActivityForResult( cropOptions.get(item).appIntent, CROP_FROM_CAMERA);
                }
            });

            builder.setOnCancelListener( new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel( DialogInterface dialog ) {

                    if (mCapturedImageURI != null ) {
                        getContentResolver().delete(mCapturedImageURI, null, null );
                        mCapturedImageURI = null;
                    }
                }
            } );

            AlertDialog alert = builder.create();

            alert.show();
        }
    }

1 个答案:

答案 0 :(得分:2)

我已经给了android.permission.MANAGE_DOCUMENTS权限。但面临同样的问题。经过大量搜索,我找到了解决方案。

暂时解决这个问题:

Intent mIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(mIntent, CHOOSE_IMAGE);

这会强制打开旧图库,而不是新的Kitkat文档视图。

现在,您可以通过在onActivityResult中调用以下内容来获取Uri:

Uri selectedImageURI = data.getData();

希望这有助于解决您的问题。