2015-06-25 7 views
6

posso aprire la galleria con questo codice,Come selezionare un video dalla galleria e ottenere il suo vero percorso?

Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType("video/*"); 

    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Video"), PICK_VIDEO_REQUEST); 

Funziona bene su un Samsung Galaxy S5. Ma in alcuni telefoni, le immagini vengono visualizzate insieme ai video.

Quali modifiche devo fare al codice per aprire la galleria per visualizzare i video solo?

Come posso ottenere il percorso reale del video selezionato quando vengono restituiti i risultati?

risposta

22

Ecco il codice completo per ottenere il percorso video dopo aver selezionato dalla galleria.

Intent intent = new Intent(); 
intent.setType("video/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent,"Select Video"),REQUEST_TAKE_GALLERY_VIDEO); 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      if (requestCode == REQUEST_TAKE_GALLERY_VIDEO) { 
       Uri selectedImageUri = data.getData(); 

       // OI FILE Manager 
       filemanagerstring = selectedImageUri.getPath(); 

       // MEDIA GALLERY 
       selectedImagePath = getPath(selectedImageUri); 
       if (selectedImagePath != null) { 

        Intent intent = new Intent(HomeActivity.this, 
          VideoplayAvtivity.class); 
        intent.putExtra("path", selectedImagePath); 
        startActivity(intent); 
       } 
      } 
     } 
    } 

    // UPDATED! 
    public String getPath(Uri uri) { 
     String[] projection = { MediaStore.Video.Media.DATA }; 
     Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
     if (cursor != null) { 
      // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL 
      // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } else 
      return null; 
    } 
+1

il percorso get restituisce null funziona per il video? – HAXM

+0

managedQuery è una funzione definita dall'utente? per favore pubblica anche questo –

+1

@ JPn non è una funzione definita dall'utente. Il metodo è stato deprecato al livello API 11, utilizzare invece CursorLoader. vedi questo link [collegamento] (https://developer.android.com/reference/android/app/Activity.html#managedQuery) – Prashant

-1

Usa

Intent intent = new Intent(); 
     intent.setType("video/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent,"Select Video"),REQUEST_TAKE_GALLERY_VIDEO); 
6
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 

startActivityForResult(intent , SELECT_VIDEO); 
+0

di aver selezionato un solo video Questo let. – b005t3r

-1
Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Video.Media.EXTERNAL_CONTENT_URI); 
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); 
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

startActivityForResult(intent, 
          CAMERA_CAPTURE_VIDEO_REQUEST_CODE); 


@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
Uri selectedImageUri = data.getData(); 
imagePath = getPath(selectedImageUri); 
public String getPath(Uri uri) { 
     String[] projection = { MediaStore.Video.Media.DATA }; 
     Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
     if (cursor != null) { 

      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } else 
      return null; 
    } 
} 
+0

metodo non è possibile –

0

Otterrete vero e proprio percorso da questo metodo getPath

public static String getPath(final Context context, final Uri uri) { 

    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 

    // DocumentProvider 
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { 
     // ExternalStorageProvider 
     if (isExternalStorageDocument(uri)) { 
      final String docId = DocumentsContract.getDocumentId(uri); 
      final String[] split = docId.split(":"); 
      final String type = split[0]; 

      if ("primary".equalsIgnoreCase(type)) { 
       return Environment.getExternalStorageDirectory() + "/" + split[1]; 
      } 

      // TODO handle non-primary volumes 
     } 
     // DownloadsProvider 
     else if (isDownloadsDocument(uri)) { 

      final String id = DocumentsContract.getDocumentId(uri); 
      final Uri contentUri = ContentUris.withAppendedId(
        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); 

      return getDataColumn(context, contentUri, null, null); 
     } 
     // MediaProvider 
     else if (isMediaDocument(uri)) { 
      final String docId = DocumentsContract.getDocumentId(uri); 
      final String[] split = docId.split(":"); 
      final String type = split[0]; 

      Uri contentUri = null; 
      if ("image".equals(type)) { 
       contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
      } else if ("video".equals(type)) { 
       contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
      } else if ("audio".equals(type)) { 
       contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      } 

      final String selection = "_id=?"; 
      final String[] selectionArgs = new String[]{ 
        split[1] 
      }; 

      return getDataColumn(context, contentUri, selection, selectionArgs); 
     } 
    } 
    // MediaStore (and general) 
    else if ("content".equalsIgnoreCase(uri.getScheme())) { 
     return getDataColumn(context, uri, null, null); 
    } 
    // File 
    else if ("file".equalsIgnoreCase(uri.getScheme())) { 
     return uri.getPath(); 
    } 

    return null; 
} 

/** 
* Get the value of the data column for this Uri. This is useful for 
* MediaStore Uris, and other file-based ContentProviders. 
* 
* @param context  The context. 
* @param uri   The Uri to query. 
* @param selection  (Optional) Filter used in the query. 
* @param selectionArgs (Optional) Selection arguments used in the query. 
* @return The value of the _data column, which is typically a file path. 
*/ 
public static String getDataColumn(Context context, Uri uri, String selection, 
            String[] selectionArgs) { 

    Cursor cursor = null; 
    final String column = "_data"; 
    final String[] projection = { 
      column 
    }; 

    try { 
     cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, 
       null); 
     if (cursor != null && cursor.moveToFirst()) { 
      final int column_index = cursor.getColumnIndexOrThrow(column); 
      return cursor.getString(column_index); 
     } 
    } finally { 
     if (cursor != null) 
      cursor.close(); 
    } 
    return null; 
} 


/** 
* @param uri The Uri to check. 
* @return Whether the Uri authority is ExternalStorageProvider. 
*/ 
public static boolean isExternalStorageDocument(Uri uri) { 
    return "com.android.externalstorage.documents".equals(uri.getAuthority()); 
} 

/** 
* @param uri The Uri to check. 
* @return Whether the Uri authority is DownloadsProvider. 
*/ 
public static boolean isDownloadsDocument(Uri uri) { 
    return "com.android.providers.downloads.documents".equals(uri.getAuthority()); 
} 

/** 
* @param uri The Uri to check. 
* @return Whether the Uri authority is MediaProvider. 
*/ 
public static boolean isMediaDocument(Uri uri) { 
    return "com.android.providers.media.documents".equals(uri.getAuthority()); 
} 

public static MultipartBody.Part getMultiPartBody(String key, String mMediaUrl) { 
    if (mMediaUrl != null) { 
     File file = new File(mMediaUrl); 
     RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); 
     return MultipartBody.Part.createFormData(key, file.getName(), requestFile); 
    } else { 
     return MultipartBody.Part.createFormData(key, ""); 
    } 
} 

}

0

Sotto codice funziona per me:

Intent videoPickIntent = new Intent(Intent.ACTION_PICK); 
videoPickIntent.setType("video/*"); 
TheActivity.startActivityForResult(Intent.createChooser(videoPickIntent, "Please pick a video"), PickIntroductionVideo); 

e in onActivityResult:

if (requestCode != PickIntroductionVideo) 
    return; 
if (resultCode != Activity.RESULT_OK) 
    return true; 
String pickedVideoUrl = FarayanUtility.getRealPathFromUri(getContext(), data.getData()); 

Metodo FarayanUtility.getRealPathFromUri è:

public static String getRealPathFromUri(Context context, Uri contentUri) { 
    Cursor cursor = null; 
    try { 
     String[] proj = {MediaStore.Images.Media.DATA}; 
     cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 
Problemi correlati