2012-05-17 38 views
9

我正在解析拍摄照片的uri到作物活动的问题。在我的应用程序中,用户可以拍摄照片或从图库中选择一张照片,然后裁剪并上传照片。一切都听起来很直接。Android:拍摄照片后调用作物活动

当从图库中选择,画廊的应用程序返回一个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 

and Crop活动不会接受这个uri。 我试图与内容提供商的另一种方法:添加新拍摄的照片的ContentProvider,然后获得sheme新的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类似于URI从图库应用程序,但是当我开始新的URI作物的活动,我得到这个异常:

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.为什么作物活动拒绝与我的新的URI的工作,尽管我新的Uri和Gallery App中的uri是相同的“内容:// ...”
2.如何调用裁剪活动在sdcard中裁剪照片,我只知道它的路径?

我试图谷歌,但仍然没有运气。
对不起,我的英文不好。谢谢。

+0

它对你有用吗? – Darpan

回答

30

intent.setType("image/*");,它仍然没有工作...

我是用什么来解决它: intent.setDataAndType(tempImageURI, "image/*");

祝你好运!

+1

你在哪里以及如何使用tempImageURI? – erdomester

+1

这个答案是正确的。我在不同的行上使用了intent.setType(“image/*”)和intent.setData(uri),并且只有从图库中选择的图像才起作用。使用setDataAndType(uri,“image/*”)也可以与其他应用程序一起使用,例如Astro和Dropbox。 – jfortunato