2015-06-25 25 views
6

ich die Galerie mit diesem Code öffnen kann,Wie wähle ich ein Video aus der Galerie und bekomme den richtigen Pfad?

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

Es ist gut auf einem Samsung Galaxy S5 arbeitet. Bei einigen Telefonen werden Bilder zusammen mit Videos angezeigt.

Welche Änderungen muss ich an den Code vornehmen, um die Galerie zu öffnen, um nur Videos anzuzeigen?

Wie kann ich den tatsächlichen Pfad des ausgewählten Videos erhalten, wenn die Ergebnisse zurückgegeben werden?

Antwort

22

Hier ist der vollständige Code den Videopfad nach der Auswahl von Galerie zu gelangen.

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

der get-Pfad gibt null zurück funktioniert es für Video? – HAXM

+0

managedQuery ist benutzerdefinierte Funktion? bitte posten Sie das auch –

+1

@JPn es ist keine benutzerdefinierte Funktion. Methode wurde in API-Ebene 11 veraltet, verwenden Sie stattdessen CursorLoader. siehe diesen Link [Link] (https://developer.android.com/reference/android/app/Activity.html#managedQuery) – Prashant

-1

Verwenden

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

Dies lässt Sie wählen nur ein Video. – 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

Methode Inside-Methode ist nicht möglich –

0

Sie wirklichen Weg von dieser Methode getPath erhalten

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

Below Code funktioniert für mich:

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

und in onActivityResult:

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

Methode FarayanUtility.getRealPathFromUri ist:

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