我在将拍摄照片的 uri 解析为作物活动时遇到问题。在我的应用程序中,用户可以拍照或从图库中选择一张,然后裁剪并上传。一切听起来都很简单。
从图库中选择时,图库应用会返回所选照片的 uri,如下所示:
content://media/external/images/media/20
我通过以下代码使用此 uri 开始裁剪活动,一切似乎都很好:
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?
我试图谷歌,但仍然没有运气。
对不起,我的英语不好。谢谢你。