2012-05-17 10 views
9

Tengo un problema al analizar una uri de foto tomada para la actividad de cultivo. En mi aplicación, los usuarios pueden tomar una foto o seleccionar una de la galería y luego recortarla y subirla. Todo suena sencillo.Android: Llamar a la actividad de cultivo después de tomar la foto

Cuando Seleccionar de la galería, Galería aplicación devuelve un URI para la foto seleccionada como esto:

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

comienzo a la actividad de los cultivos con este URI siguiente código, todo parece bien:

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

Pero cuando tomo una foto, solo puedo conocer el camino de la foto como este:

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

y Cosecha La actividad no aceptará este uri. he intentado otra manera con el Proveedor de Contenido: añadir foto recién capturado a ContentProvider, y luego obtener nueva uri en Sheme "contenido: // ..." de código siguiente:

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

Mi nuevo Uri es similar a uri Galería de aplicación, pero cuando comienzo a la actividad de cultivos con nuevo Uri, consigo este Excepción:

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

Mis preguntas:
Actividad 1. ¿Por qué cultivos se niega a trabajar con mi nuevo Uri, a pesar de mi nuevo Uri y uri de la aplicación de la Galería son el mismo "contenido: // ..."
2. ¿Cómo puedo llamar a Crop Activity para recortar una foto en una tarjeta SD, que solo conozco su ruta?

Intenté google pero todavía no tuve suerte.
Lo siento por mi mal inglés. Gracias.

+0

¿Te funcionó entonces? – Darpan

Respuesta

30

tuve intent.setType("image/*"); y que todavía no ha funcionado ...

Lo resuelto por mí estaba usando: intent.setDataAndType(tempImageURI, "image/*");

Buena suerte!

+1

dónde y cómo se usa tempImageURI? – erdomester

+1

esta respuesta es correcta. Tenía intent.setType ("image/*") e intent.setData (uri) en líneas separadas y solo funcionaba una imagen seleccionada de la galería. El uso de setDataAndType (uri, "image/*") también funcionó con otras aplicaciones, como Astro y Dropbox. – jfortunato

Cuestiones relacionadas