Android: Aufruf der Ernteaktivität nach der Aufnahme eines Fotos

Ich stehe vor einem Problem beim Parsen einer Uri von aufgenommenem Foto, um Aktivität zu beschneiden. In meiner Anwendung können Benutzer ein Foto aufnehmen oder eines aus der Galerie auswählen und es dann zuschneiden und hochladen. Alles klingt einfach.

Wenn Sie aus der Galerie auswählen, gibt die Galerie-App eine URL für das ausgewählte Foto wie diese zurück:

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

Ich starte die Erntetätigkeit mit diesem Uri, indem ich den folgenden Code befolge, alles scheint in Ordnung zu sein:

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);

Aber wenn ich ein Foto mache, kann ich den Pfad des Fotos nur folgendermaßen kennen:

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

und Crop Activity akzeptiert diesen Uri nicht. Ich habe es mit Content Provider anders versucht: Füge neu aufgenommenes Foto zu ContentProvider hinzu und erhalte dann eine neue URL im Schema "content: // ..." aus folgendem Code:

// 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);
}

Mein neuer Uri ähnelt dem Uri aus der Galerie-App, aber wenn ich Crop Activity mit neuem Uri starte, erhalte ich diese Ausnahme:

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

Meine Fragen:
1. Warum Crop Activity sich weigert, mit meinem neuen Uri zu arbeiten, obwohl mein neuer Uri und der Uri aus der Gallery App den gleichen "Inhalt haben: // ..."
2. Wie kann ich Crop Activity aufrufen, um ein Foto auf einer SD-Karte zuzuschneiden, deren Pfad ich nur kenne?

Ich habe versucht zu googeln, aber immer noch kein Glück.
Entschuldigung für mein schlechtes Englisch. Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage