Android :Вызов активности урожая после фотосъемки

У меня возникла проблема с анализом uri сделанной фотографии для обрезки. В моем приложении пользователи могут сделать снимок или выбрать его из галереи, а затем обрезать его и загрузить. Все звучит просто.

При выборе из Галереи приложение Галерея возвращает uri для выбранной фотографии, например:

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

Я запускаю Crop Activity с этим 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, а затем получить новый uri в схеме «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);
}

Мой новый Uri похож на uri из приложения Галерея, но когда я запускаю Crop Activity с новым 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. Почему Crop Activity отказывается работать с моим новым Uri, несмотря на то, что мой новый Uri и uri из приложения Галерея имеют один и тот же «контент ://...»
2.Как я могу вызвать Crop Activity, чтобы обрезать фотографию на SD-карте, путь к которой я знаю только?

Я пытался гуглить, но все равно не повезло.
Извините за мой плохой английский. Спасибо.

9
задан thaiduy 17 May 2012 в 08:21
поделиться