安卓新手问题,调用系统照相功能,在调用裁剪功能,然后显示图片。

2016-05-05 17:25:03 +08:00
 syimo

一个简单的拍照 DEMO ,拍完照,跳转到系统裁剪界面,裁剪保存完毕后,并显示。
求大神指点!!!(抓狂中...)
但是,我在 SD 卡目录下,发现该文件output_image.jpg 是 0 字节
运行环境是 SDK : 23 、安卓 6.0
权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
变量: private Uri imageUri;

主要逻辑代码如下:

//跳转到拍照,逻辑代码如下:


takePhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");
            try {
                if (outputImage.exists()) {
                    outputImage.delete();
                }
                outputImage.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            imageUri = Uri.fromFile(outputImage);
            Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
            i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
            startActivityForResult(i, TAKE_PHOTO);
        }
    });
    




//回调函数,先是拍完照后,返回 TAKE_PHOTO 。
//然后再跳转到裁剪界面,返回 CROP_PHOTO ,并显示图片
switch (requestCode) {

        case TAKE_PHOTO:
            if (resultCode == RESULT_OK) {
                Intent i = new Intent("com.android.camera.action.CROP");
                i.setDataAndType(imageUri, "image/*");
                i.putExtra("scale", true);
                i.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(i, CROP_PHOTO);
            }
            break;
        case CROP_PHOTO:
            if (resultCode == RESULT_OK) {
                try {
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                    photo.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
            break;
    }
9483 次点击
所在节点    Android
3 条回复
l8mEQ331
2016-05-06 10:28:07 +08:00
我在 5.1 和 6.01 的系统上都试了一下,没问题。
之前猜可能是 6.0 的权限问题,但是也就 outputImage.createNewFile()这部分是需要手动获取权限。拍照调用系统相机的话应该是不需要的。所以换个手机试试?(比如 MIUI 有自己的权限管理机制,需要在设置里手动打开之类的)
syimo
2016-05-06 11:54:36 +08:00
@l8mEQ331 感谢,问题已解决。参考这里。 https://segmentfault.com/q/1010000005066402
对了,我能问下一般这个参数 i.putExtra("scale", true); intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
去哪里查找资料啊?
l8mEQ331
2016-05-06 19:19:06 +08:00
@syimo 只有搜索,然后自己总结。 Intent action 似乎没有专门的文档,也可能是我不知道吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276573

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX