怎样获取安卓系统文件中的MP3,和获取MP3的时长

MrStevene 2013-04-22 09:14:14
我在做一个安卓的音乐播放器,但是要求要遍历系统所有的MP3文件,以前只做过遍历sdcard中的,要用什么方法获取系统中的啊?还有就是要求要在音乐列表中显示文件的时长,以前只会用getduration();方法,现在在播放之前就要获取时长,怎么才能得到?求大神解答,急,,,,,,,,,,,
...全文
1515 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrStevene 2013-04-24
  • 打赏
  • 举报
回复
引用 10 楼 CuGBabyBeaR 的回复:
引用 9 楼 u010410106 的回复:引用 8 楼 CuGBabyBeaR 的回复:引用 4 楼 u010410106 的回复:我已经得到了MP3的一个文件对象,我想在想查询他的时长,用以下代码:您看这样对吗? ContentResolver mResolver = ctx.getContentResolver(); Cursor cursor = mR……
哦,那我继续找找,谢谢您了~
CuGBabyBeaR 2013-04-24
  • 打赏
  • 举报
回复
引用 9 楼 u010410106 的回复:
引用 8 楼 CuGBabyBeaR 的回复:引用 4 楼 u010410106 的回复:我已经得到了MP3的一个文件对象,我想在想查询他的时长,用以下代码:您看这样对吗? ContentResolver mResolver = ctx.getContentResolver(); Cursor cursor = mResolver.query(MediaSto……
这个...真心没搞过...
MrStevene 2013-04-24
  • 打赏
  • 举报
回复
引用 8 楼 CuGBabyBeaR 的回复:
引用 4 楼 u010410106 的回复:我已经得到了MP3的一个文件对象,我想在想查询他的时长,用以下代码:您看这样对吗? ContentResolver mResolver = ctx.getContentResolver(); Cursor cursor = mResolver.query(MediaStore.Audio.Media.DURATION……
明白了,感谢您的解答! 还有一个问题想请教您一下,怎样用service实现歌词同步?昨天在下载专区下了一个例子,但是实现不了,狠郁闷,能发个例子到我邮箱吗?谢谢了! 邮箱:15143032858@163.com
DrSmart 2013-04-23
  • 打赏
  • 举报
回复
这是你需要查询的字段名啊
MrStevene 2013-04-23
  • 打赏
  • 举报
回复
引用 2 楼 CuGBabyBeaR 的回复:
用ContentResolver去query MediaStore.Audio.Media.EXTERNAL_CONTENT_URI这个数据库 MediaStore.Audio.Media.TITLE 字段是曲名 MediaStore.Audio.Media.ARTIST 字段是歌手 MediaStore.Audio.Media.ARTIST 字段是专辑 MediaStore.Audio.……
我已经得到了MP3的一个文件对象,我想在想查询他的时长,用以下代码:您看这样对吗? ContentResolver mResolver = ctx.getContentResolver(); Cursor cursor = mResolver.query(MediaStore.Audio.Media.DURATION , null, null, null, null); 我想问下,query方法的第二个参数说是用string[]数组代替,这是在哪获取的?
MrStevene 2013-04-23
  • 打赏
  • 举报
回复
引用 2 楼 CuGBabyBeaR 的回复:
用ContentResolver去query MediaStore.Audio.Media.EXTERNAL_CONTENT_URI这个数据库 MediaStore.Audio.Media.TITLE 字段是曲名 MediaStore.Audio.Media.ARTIST 字段是歌手 MediaStore.Audio.Media.ARTIST 字段是专辑 MediaStore.Audio.……
我是hi新手,有点不明白,这个具体怎么用的?
CuGBabyBeaR 2013-04-23
  • 打赏
  • 举报
回复
引用 4 楼 u010410106 的回复:
我已经得到了MP3的一个文件对象,我想在想查询他的时长,用以下代码:您看这样对吗? ContentResolver mResolver = ctx.getContentResolver(); Cursor cursor = mResolver.query(MediaStore.Audio.Media.DURATION , null, null, null, null); 我想问下,query方法的第二个参数说是用string[]数组代替,这是在哪获取的?
不对 用contentResolver.query()方法访问数据库直接得到的是满足selection的所有曲目 返回的结果是一个cursor 你需要自己遍历这个cursor来获得这些曲目每一条的所有信息 例如这个方法可以获取手机上包括SD卡中所有长度大于10秒且是音乐的音频文件
	private ArrayList<Music> queryMusics() {
		ArrayList<Music> musiclistResult = new ArrayList<Music>();
		ContentResolver cr = this.getContentResolver();
		Cursor musics = cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
				new String[] {
						MediaStore.Audio.Media._ID, // int
						MediaStore.Audio.Media.TITLE,
						MediaStore.Audio.Media.ARTIST,
						MediaStore.Audio.Media.ALBUM,
						MediaStore.Audio.Media.DURATION,
						MediaStore.Audio.Media.DATA, // String
						MediaStore.Audio.Media.DISPLAY_NAME, // String
						MediaStore.Audio.Media.MIME_TYPE // String
				},
				MediaStore.Audio.Media.IS_MUSIC + " = 1 AND "
						+ MediaStore.Audio.Media.DURATION + " > 10000",
				null,
				MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
		Log.d("", "musics : " + musics.getCount());

		musics.moveToFirst();
		while (!musics.isAfterLast()) {
			Music temp = new Music();
			temp._ID = musics.getInt(musics.getColumnIndex(MediaStore.Audio.Media._ID));
			temp.ALBUM = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.ALBUM));
			temp.ARTIST = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.ARTIST));
			temp.DATA = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.DATA));
			temp.DURATION = musics.getLong(musics.getColumnIndex(MediaStore.Audio.Media.DURATION));
			temp.TITLE = musics.getString(musics.getColumnIndex(MediaStore.Audio.Media.TITLE));
			temp.isExist = true;

			musiclistResult.add(temp);
			musics.moveToNext();
		}
		musics.close();
		return musiclistResult;
	}
	/**
	 * 音乐的信息
	 * 
	 * @author BabyBeaR
	 */
	@SuppressWarnings("unused")
	private class Music {
		int _ID;
		long DURATION;
		boolean isExist;
		String TITLE, ARTIST, ALBUM, DATA;
	}
CuGBabyBeaR 2013-04-23
  • 打赏
  • 举报
回复
引用 4 楼 u010410106 的回复:
引用 2 楼 CuGBabyBeaR 的回复:用ContentResolver去query MediaStore.Audio.Media.EXTERNAL_CONTENT_URI这个数据库 MediaStore.Audio.Media.TITLE 字段是曲名 MediaStore.Audio.Media.ARTIST 字段是歌手 MediaStore.Audio.M……
字段名就在MediaStore.Audio.Media里 例如常量MediaStore.Audio.Media.TITLE 其值是一个String 就是曲名的字段名
MrStevene 2013-04-23
  • 打赏
  • 举报
回复
引用 5 楼 DrSmart 的回复:
这是你需要查询的字段名啊
这个数据库不是系统自动生成的吗?字段名称我不知道啊,具体是什么的字段名称,能否给个例子?
CuGBabyBeaR 2013-04-22
  • 打赏
  • 举报
回复
用ContentResolver去query MediaStore.Audio.Media.EXTERNAL_CONTENT_URI这个数据库 MediaStore.Audio.Media.TITLE 字段是曲名 MediaStore.Audio.Media.ARTIST 字段是歌手 MediaStore.Audio.Media.ARTIST 字段是专辑 MediaStore.Audio.Media.DURATION 字段是时间 单位是毫秒 MediaStore.Audio.Media.DATA 字段是文件位置 MediaStore.Audio.Media.DISPLAY_NAME 字段是显示名称
balmy 2013-04-22
  • 打赏
  • 举报
回复
你要的时长可不可以去media多媒体数据库查一下,internal的数据库是存放系统铃声的,既然你做过sdcard的,系统的应该原理是一样的吧,MediaScanner也可以尝试下

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧