Android:拍照后调用裁剪 Activity

标签 android crop

我在将拍摄照片的 uri 解析为裁剪 Activity 时遇到问题。在我的应用程序中,用户可以拍照或从图库中选择一张照片,然后裁剪并上传。一切听起来都很简单。

当从相册中选择照片时,相册应用会返回所选照片的​​ uri,如下所示:

content://media/external/images/media/20

我通过以下代码使用此 uri 开始裁剪 Activity ,一切似乎都正常:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(uri);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);            
startActivityForResult(intent, REQUEST_CODE_CROP);

但是当我拍照的时候,我只能这样知道照片的路径:

file:///mnt/sdcard/iBet88.us/IMAGE_20120517_151606.jpg

并且 Crop Activity 不会接受这个 uri。 我用 Content Provider 尝试了另一种方法:将新捕获的照片添加到 ContentProvider,然后通过以下代码在 sheme“content://...”中获取新的 uri:

// TODO insert to Content Provider
ContentResolver cr = getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.DATA, avatarFilePathTmp.getPath());
contentValues.put(MediaStore.Images.Media.IS_PRIVATE, 0);
cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);

// TODO get id from Content Provider
String[] projection = { 
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DATA
};
String selectionClause = "" + MediaStore.Images.Media.DATA + " = ?";

String[] selectionArgs = {avatarFilePathTmp.getPath()};
Cursor mCursor = getContentResolver().query(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    selectionClause,
    selectionArgs,
    "");

Uri uri = null;    
if (null == mCursor) {

} else if (mCursor.getCount() < 1) {

} else {
    mCursor.moveToFirst();
    int id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media._ID));

    String u = "content://media/external/images/media/" + id;

    // create new Uri
    uri = Uri.parse(u);
}

我的新 Uri 类似于 Gallery 应用程序中的 uri,但是当我使用新 Uri 启动 Crop Activity 时,出现此异常:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.android.camera.action.CROP dat=content://media/external/images/media/20 (has extras) }

我的问题:
1. 为什么 Crop Activity 拒绝使用我的新 Uri,尽管我的新 Uri 和来自 Gallery App 的 uri 是相同的“content://...”
2. 如何调用 Crop Activity 来裁剪 sdcard 中的照片,而我只知道它的路径?

我尝试用谷歌搜索,但仍然没有成功。
对不起,我的英语不好。谢谢。

最佳答案

我有 intent.setType("image/*"); 但它仍然不起作用...

为我解决问题的方法是使用: intent.setDataAndType(tempImageURI, "image/*");

祝你好运!

关于Android:拍照后调用裁剪 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10632137/

相关文章:

image - CSS3 居中裁剪图像

android - 如何使用 android maven 插件在命令行上指定目标设备(或模拟器)?

swift - 裁剪后的图像不清晰快速

安卓裁剪背景

c# - 如何从 WinForm pictureBox 中的图像裁剪多边形区域?

android - 从 YV12 或 NV12 字节数组裁剪图像

android - 模拟清理 Activity android

java - Android USB批量传输Teensy2++更新缓慢

android - 使用 PagerAdapter 开始新 Activity

安卓应用 : where to send user for Market app rating?