2011-12-27 17 views
6
  1. selector de lanzamiento de fotos con Intent.ACTION_GET_CONTENT
  2. Recuperar URI del elemento seleccionado
  3. Recuperar PATH del URI para que pueda publicarla en mi servidor webURI de Intent.ACTION_GET_CONTENT en Archivo

    Código para poner en marcha navegar

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    startActivityForResult(intent, BROWSE_IMAGE_REQUEST_CODE); 
    

    código para recuperar seleccionado imagen

    if (RESULT_OK == resultCode && 
          BROWSE_IMAGE_REQUEST_CODE == requestCode) { 
    Uri uri = data.getData(); 
    

    código para enviar al servidor web

    File file = new File(uri.getPath()); 
    new FileSystemResourceFile(file); 
    

Actualmente soy capaz de recuperar la ruta de la URI no hay problema /external/images/media/24 pero por alguna archivo extraña razón siempre es NULL , ¿ayuda por favor?

+2

uri.getPath() es/externa/images/media/24. Este es un archivo? – miqbal

+0

sí y estoy tratando de pasar ese archivo a FileSystemResourceFile en vano – lemon

Respuesta

19

que he hecho este método para convertir Uri de Intent.ACTION_GET_CONTENT al camino real:

public static String getRealPathFromUri(Activity activity, Uri contentUri) { 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = activity.managedQuery(contentUri, proj, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

que a su vez convierte en File:

Uri filePathFromActivity = (Uri) extras.get(Intent.EXTRA_STREAM); 
filePathFromActivity = Uri.parse(FileUtil.getRealPathFromUri((Activity) IntentActivity.this, filePathFromActivity)); 
File imageFile = new File(filePathFromActivity.getPath()); 
+2

Activity.managedQuery está depreciado. Use: \t CursorLoader loader = new CursorLoader (actividad, contentUri, proj, null, null, null); en su lugar – Patrick

+1

@Patrick No es muy obvio para mí CÓMO usaría un CursorLoader en este caso. O cómo usarlo en absoluto, francamente. La documentación deja mucho que desear. Dado que puedo ejecutar toda esta tarea en un hilo, voy a simplemente ignorar su consejo y usar el managedQuery obsoleto(). Porque es mucho más obvio cómo hacer que funcione, especialmente porque necesito un resultado sincrónico. – SomeCallMeTim

+0

@SomeCallMeTim para usar CursorLoader simplemente llame al método loadInBackground(). Devolverá un Cursor. http://developer.android.com/reference/android/content/CursorLoader.html#loadInBackground%28%29 –

Cuestiones relacionadas