有一个需求是读取本地的音频,并获取其中的信息。
一种做法是读取系统的媒体库
query方法的第二和第三个参数为要访问的路劲,通过sql来设置。不指定路径读取的则是手机全部音频
List list = new ArrayList();
String[] pathOpt = new String[]{Audio2VideoActivity.FOLDER_PATH + "/output%"};
String selection = MediaStore.Video.Media.DATA + " like ? ";
Cursor cursor = context.getContentResolver()
.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, selection, pathOpt, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String videoName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
videoName = videoName.split("\\.")[0];
list.add(videoName);
}
cursor.close();
}
return list;
但是媒体库的刷新是不是及时的,有可能取到的信息不准确,这里提供第二种方法
public static long getMediaDuration(String filePath) {
long duration = 0;
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
try {
mediaMetadataRetriever.setDataSource(filePath);
String durationStr = mediaMetadataRetriever
.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION);
if (durationStr != null) {
duration = Long.parseLong(durationStr);
}
} catch (IllegalArgumentException e) {
Logger.e(TAG, e);
} finally {
mediaMetadataRetriever.release();
}
return duration;