通过MediaStore浏览音频
【摘要】
使用MediaStore提供器访问存储的音频文件,将使用android.provider.MediaStore.Audio程序包。
为了使用MediaStore,需要指定想要返回的数据。可以通过使用在android.provider.MediaStore.Audio.Media类中定义的常量创建一个字符串数组来实现该操作。这些常量都是...
使用MediaStore提供器访问存储的音频文件,将使用android.provider.MediaStore.Audio程序包。
为了使用MediaStore,需要指定想要返回的数据。可以通过使用在android.provider.MediaStore.Audio.Media类中定义的常量创建一个字符串数组来实现该操作。这些常量都是保存在MediaStore中以用于音频的标准字段。
-
String[] columns = { MediaStore.Audio.Media.DATA,//音频文件的实际路径
-
MediaStore.Audio.Media._ID,//内部ID
-
MediaStore.Audio.Media.TITLE,//标题
-
MediaStore.Audio.Media.DISPLAY_NAME,//显示名称
-
MediaStore.Audio.Media.MIME_TYPE,
-
MediaStore.Audio.Media.ARTIST,//艺术家
-
MediaStore.Audio.Media.ALBUM,//唱片集
-
MediaStore.Audio.Media.IS_RINGTONE,
-
MediaStore.Audio.Media.IS_ALARM,
-
MediaStore.Audio.Media.IS_MUSIC,
-
MediaStore.Audio.Media.IS_NOTIFICATION};
除了指向MediaStore的Uri,managedQuery方法还接受想返回的列数组、一条SQL WHERE子句、用于WHERE子句的值以及一条SQL ORDER BY子句。
-
String where = android.provider.MediaStore.Audio.Media.ALBUM
-
+ "=?";
-
String whereVal[] = { cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM)) };
-
-
String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
-
-
cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns, where, whereVal, orderBy);
要做的第一件事是创建几个变量,以保存一些想要从结果中访问的列的编号。虽然这不是必须的,但是获得索引值将会非常方便,从而不必在每次需要它们的时候调用Cursor的方法。
-
int fileColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
-
int mimeTypeColumn = cursor.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE);
为了获得实际数据,可以调用Cursor上的“getXXX”方法之一,并传入希望检索的列索引。如果数据预期是一个字符串,那么可以调用getString。如果数据预期是一个整数,那么可以调用getInt。对于所有的基本数据类型,都有一个合适的“get”方法。
-
String audioFilePath = cursor.getString(fileColumn);
-
String mimeType = cursor.getString(mimeTypeColumn);
-
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
-
File newFile = new File(audioFilePath);
-
intent.setDataAndType(Uri.fromFile(newFile), mimeType);
-
public class AudioBrowser extends ListActivity {
-
-
Cursor cursor;
-
-
public static int STATE_SELECT_ALBUM = 0;
-
public static int STATE_SELECT_SONG = 1;
-
-
int currentState = STATE_SELECT_ALBUM;
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
-
String[] columns = { android.provider.MediaStore.Audio.Albums._ID,
-
android.provider.MediaStore.Audio.Albums.ALBUM };//希望返回的唱片集的名称
-
-
cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
-
columns, null, null, null);
-
-
String[] displayFields = new String[] { MediaStore.Audio.Albums.ALBUM };//显示的Cursor对象中的列名
-
int[] displayViews = new int[] { android.R.id.text1 };
-
setListAdapter(new SimpleCursorAdapter(this,
-
android.R.layout.simple_list_item_1, cursor, displayFields,
-
displayViews));//将Cursor对象绑定到ListView对象上
-
-
}
-
-
protected void onListItemClick(ListView l, View v, int position, long id) {
-
if (currentState == STATE_SELECT_ALBUM) {
-
//传入在列表中选定唱片集的位置,同时Cursor对象利用该位置,通过moveToPosition获知是哪个唱片集
-
if (cursor.moveToPosition(position)) {
-
-
String[] columns = { MediaStore.Audio.Media.DATA,//音频文件的实际路径
-
MediaStore.Audio.Media._ID,
-
MediaStore.Audio.Media.TITLE,
-
MediaStore.Audio.Media.DISPLAY_NAME,
-
MediaStore.Audio.Media.MIME_TYPE,
-
};
-
-
String where = android.provider.MediaStore.Audio.Media.ALBUM
-
+ "=?";
-
//字符数组,其中每个字符串对应一个使用的“?”符号
-
String whereVal[] = { cursor.getString(cursor
-
.getColumnIndex(MediaStore.Audio.Albums.ALBUM)) };
-
-
String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
-
//查询只属于特定唱片集的媒体文件
-
cursor = managedQuery(
-
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns,
-
where, whereVal, orderBy);
-
-
String[] displayFields = new String[] { MediaStore.Audio.Media.DISPLAY_NAME };
-
int[] displayViews = new int[] { android.R.id.text1 };
-
setListAdapter(new SimpleCursorAdapter(this,
-
android.R.layout.simple_list_item_1, cursor,
-
displayFields, displayViews));
-
-
currentState = STATE_SELECT_SONG;
-
}
-
} else if (currentState == STATE_SELECT_SONG) {
-
-
if (cursor.moveToPosition(position)) {
-
-
int fileColumn = cursor
-
.getColumnIndex(MediaStore.Audio.Media.DATA);
-
int mimeTypeColumn = cursor
-
.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE);
-
-
String audioFilePath = cursor.getString(fileColumn);
-
String mimeType = cursor.getString(mimeTypeColumn);
-
-
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
-
-
File newFile = new File(audioFilePath);
-
intent.setDataAndType(Uri.fromFile(newFile), mimeType);
-
-
startActivity(intent);
-
}
-
}
-
}
-
}
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/8762534
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)