2017-09-05 103 views
2

我用this得到的持續時間,但它不適合我。可以有人告訴我什麼是問題?如何從MediaStore獲取視頻的持續時間?

任何幫助表示讚賞。

Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
      String[] columns = {MediaStore.Video.VideoColumns.DURATION}; 
      String selection = MediaStore.Video.VideoColumns.DATA + "=?"; 
      String selectionArgs[] = {"/data/data/com.test.test/files/video1.mp4"}; 
      Cursor cursor = context.getContentResolver().query(uri, columns, selection, selectionArgs, null); 
      if (cursor != null) { 
       if (cursor.moveToFirst()) { 
        String duration = cursor.getString(cursor.getColumnIndex(MediaStore.Video.VideoColumns.DURATION)); 
       } 
       cursor.close(); 
      } 
+1

該視頻是不是在數據庫中,或者由於某種原因,數據列不正是你的路徑相匹配。爲了弄清楚發生了什麼,我建議你去掉''MediaStore.Video.Media.EXTERNAL_CONTENT_URI''中的所有條目,刪除你的選擇和selectionArgs。您可以更改列以包含DATA列和可能的ID,並使用DatabaseUtils.dumpCursor將內容寫入logcat。 – cwbowron

+0

@cwbowron thx尋求幫助。 –

回答

1

的MediaStore是包含在devices.I我不知道內部和外部存儲所有可用的媒體元數據的媒體供應商,但您使用的可能的路徑是不爲MediaStore.If看到你正在使用的MediaPlayer做這樣的...

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfYourFile)); 
int duration = mp.getDuration(); 
0

如果你已經得到了URI或文件路徑的視頻,它可能是更容易使用MediaMetadataRetriever類。這將是這個樣子:

MediaMetadataRetriever r = new MediaMetadataRetriever(); 
r.setDataSource(filePath); 
String durString = r.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 
int duration = Integer.parseInt(durString); 
+0

Thx的迴應,但我真的需要得到它這樣。 –

相關問題