Android:拍照后调用裁剪活动

tha*_*duy 9 android crop

我正在解决将裁剪的照片用于裁剪活动的问题.在我的应用程序中,用户可以拍照或从库中选择一个,然后裁剪并上传.一切听起来都很简单.

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

content://media/external/images/media/20
Run Code Online (Sandbox Code Playgroud)

我通过以下代码开始使用此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);
Run Code Online (Sandbox Code Playgroud)

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

file:///mnt/sdcard/iBet88.us/IMAGE_20120517_151606.jpg
Run Code Online (Sandbox Code Playgroud)

和Crop Activity不接受这个uri.我尝试了另一种与Content Provider相关的方法:将新捕获的照片添加到ContentProvider,然后通过以下代码获取新的uri in sheme"content:// ...":

// 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);
}
Run Code Online (Sandbox Code Playgroud)

我的新Uri与Gallery app中的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) }
Run Code Online (Sandbox Code Playgroud)

我的问题:
1.为什么Crop Activity拒绝使用我的新Uri,尽管我的新Uri和来自Gallery App的uri是相同的"content:// ..."
2.我怎样才能调用Crop Activity来裁剪照片我知道它的路径的SD卡吗?

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

小智 30

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

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

祝好运!