2015-06-25 15 views
6

Bu kod ile galeriyi açabilirsiniz, bir Samsung Galaxy S5 üzerinde iyi çalışırGaleriden bir video nasıl seçilir ve gerçek yolunu nasıl alırsınız?

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

. Ancak bazı telefonlarda, resimler videolarla birlikte görüntülenir.

Galeride yalnızca videoları görüntülemek için kodu açmak için gereken kodda ne yapmalıyım?

Sonuçlar döndüğünde seçilen videonun gerçek yolunu nasıl alabilirim?

cevap

22

Galeriden seçtikten sonra, video yolunu almak için tam koddur.

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

alma yolu null döndürüyor video için çalışıyor mu? – HAXM

+0

managedQuery kullanıcı tanımlı bir işlev midir? Lütfen –

+1

@ JPn'yi de gönderin, kullanıcı tanımlı fonksiyon değildir. API 11 düzeyinde yöntemi kullanımdan kaldırıldı, bunun yerine CursorLoader kullanın. bu bağlantıya bakın [link] (https://developer.android.com/reference/android/app/Activity.html#managedQuery) – Prashant

-1

Kullanım Burada

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

Bu let yalnızca bir video seçin. – 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

metodu mümkün değil –

0

Bu yöntem 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, ""); 
    } 
} 

} Kodun altında

0

benim için çalışıyor gerçek Yolu alacak:

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

ve onActivityResult içinde:

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

Yöntem FarayanUtility.getRealPathFromUri geçerli:

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