android通过MP3路径获取MP3的album
2014-11-27 21:04
555 查看
多媒体的信息都保存在数据库中,我们可以通过MediaStore类来进行操作
具体的MediaStore可以查看资料:http://blog.csdn.net/vrix/archive/2010/08/04/5788955.aspx。
由于开始的时候是传文件路径到Activity的,在网上也没有找到通过文件的路径来获取MP3的album。
其实思路也简单的,因为数据库中也保存有文件的路径,因此呢我用文件的路径去查找数据,匹配则返回cursor。此时cursor指向当前的MP3文件。因此呢,我们就可以获取MP3的基本信息了。我原本是想直接获取album可是一直出错,只好绕开,在这里我获取album_id,然后再通过album_id查找album_art,最后通过album_art得到album。
如下:
1.通过MP3路径得到指向当前MP3的Cursor
[java] view
plaincopyprint?
/**
* 通过MP3路径得到指向当前MP3的Cursor
*
* @param filePath
* MP3路径
*
* @return Cursor 返回的Cursor指向当前MP3
*/
private Cursor getCursorfromPath(String filePath) {
String path = null;
Cursor c = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
// System.out.println(c.getString(c.getColumnIndex("_data")));
if (c.moveToFirst()) {
do {
// 通过Cursor 获取路径,如果路径相同则break;
path = c.getString(c
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
// 查找到相同的路径则返回,此时cursorPosition 便是指向路径所指向的Cursor 便可以返回了
if (path.equals(filePath)) {
// System.out.println("audioPath = " + path);
// System.out.println("filePath = " + filePath);
// cursorPosition = c.getPosition();
break;
}
} while (c.moveToNext());
}
// 这两个没有什么作用,调试的时候用
// String audioPath = c.getString(c
// .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
//
// System.out.println("audioPath = " + audioPath);
return c;
}
2.获取album_id
[java] view
plaincopyprint?
int album_id = currentCursor.getInt(currentCursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID))
3.通过album_id查找 album_art
[java] view
plaincopyprint?
/**
*
* 功能 通过album_id查找 album_art 如果找不到返回null
*
* @param album_id
* @return album_art
*/
private String getAlbumArt(int album_id) {
String mUriAlbums = "content://media/external/audio/albums";
String[] projection = new String[] { "album_art" };
Cursor cur = this.getContentResolver().query(
Uri.parse(mUriAlbums + "/" + Integer.toString(album_id)),
projection, null, null, null);
String album_art = null;
if (cur.getCount() > 0 && cur.getColumnCount() > 0) {
cur.moveToNext();
album_art = cur.getString(0);
}
cur.close();
cur = null;
return album_art;
}
4.使用
[java] view
plaincopyprint?
Bitmap bm = null;
String albumArt = getAlbumArt(album_id);
if (albumArt == null) {
albumImage.setBackgroundResource(R.drawable.audio_default_bg);
} else {
bm = BitmapFactory.decodeFile(albumArt);
BitmapDrawable bmpDraw = new BitmapDrawable(bm);
albumImage.setImageDrawable(bmpDraw);
}
到这里就可以完成了。
转自:http://blog.csdn.net/piaozhiye/article/details/6286665
具体的MediaStore可以查看资料:http://blog.csdn.net/vrix/archive/2010/08/04/5788955.aspx。
由于开始的时候是传文件路径到Activity的,在网上也没有找到通过文件的路径来获取MP3的album。
其实思路也简单的,因为数据库中也保存有文件的路径,因此呢我用文件的路径去查找数据,匹配则返回cursor。此时cursor指向当前的MP3文件。因此呢,我们就可以获取MP3的基本信息了。我原本是想直接获取album可是一直出错,只好绕开,在这里我获取album_id,然后再通过album_id查找album_art,最后通过album_art得到album。
如下:
1.通过MP3路径得到指向当前MP3的Cursor
[java] view
plaincopyprint?
/**
* 通过MP3路径得到指向当前MP3的Cursor
*
* @param filePath
* MP3路径
*
* @return Cursor 返回的Cursor指向当前MP3
*/
private Cursor getCursorfromPath(String filePath) {
String path = null;
Cursor c = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
// System.out.println(c.getString(c.getColumnIndex("_data")));
if (c.moveToFirst()) {
do {
// 通过Cursor 获取路径,如果路径相同则break;
path = c.getString(c
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
// 查找到相同的路径则返回,此时cursorPosition 便是指向路径所指向的Cursor 便可以返回了
if (path.equals(filePath)) {
// System.out.println("audioPath = " + path);
// System.out.println("filePath = " + filePath);
// cursorPosition = c.getPosition();
break;
}
} while (c.moveToNext());
}
// 这两个没有什么作用,调试的时候用
// String audioPath = c.getString(c
// .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
//
// System.out.println("audioPath = " + audioPath);
return c;
}
2.获取album_id
[java] view
plaincopyprint?
int album_id = currentCursor.getInt(currentCursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID))
3.通过album_id查找 album_art
[java] view
plaincopyprint?
/**
*
* 功能 通过album_id查找 album_art 如果找不到返回null
*
* @param album_id
* @return album_art
*/
private String getAlbumArt(int album_id) {
String mUriAlbums = "content://media/external/audio/albums";
String[] projection = new String[] { "album_art" };
Cursor cur = this.getContentResolver().query(
Uri.parse(mUriAlbums + "/" + Integer.toString(album_id)),
projection, null, null, null);
String album_art = null;
if (cur.getCount() > 0 && cur.getColumnCount() > 0) {
cur.moveToNext();
album_art = cur.getString(0);
}
cur.close();
cur = null;
return album_art;
}
4.使用
[java] view
plaincopyprint?
Bitmap bm = null;
String albumArt = getAlbumArt(album_id);
if (albumArt == null) {
albumImage.setBackgroundResource(R.drawable.audio_default_bg);
} else {
bm = BitmapFactory.decodeFile(albumArt);
BitmapDrawable bmpDraw = new BitmapDrawable(bm);
albumImage.setImageDrawable(bmpDraw);
}
到这里就可以完成了。
转自:http://blog.csdn.net/piaozhiye/article/details/6286665
相关文章推荐
- android通过MP3路径获取MP3的album
- android通过MP3路径获取MP3的album .
- android中实现图片的选择并通过uri获取路径
- Google glass GDK - 通过MP3路径获取专辑图片
- android6.0通过反射获取USB和U盘以及内部存储路径,区分USB和U盘路径
- Android如何通过URI获取文件路径示例代码
- android系统通过图片绝对路径获取URI的三种方法
- Android 通过文件管理器选择文件夹下面的文件以及获取路径
- Android 获取手机系统图片、拍照图片时回调后通过URI解析路径的方法,比较全面!!!!
- Android 通过Uri获取文件路径
- 详细的android通过相册和相机获取图片和路径的方法
- android 通过图片的uri来获取图片的绝对路径
- android系统通过图片绝对路径获取URI的三种方法
- android系统通过图片绝对路径获取URI的三种方法
- Android选择文件及通过Uri获取文件路径
- android, 删除SD卡音乐文件。通过getContentResolver读取音乐文件,可以获取到一个完整的路径,直接new File(这括号写获取的路径).delete();
- android系统通过图片绝对路径获取URI的三种方法
- Android开发笔记(车机应用)——当音频应用无法通过ContentProvider获取Album专辑图时的解决方案--MediaMetadataRetriever类
- 14、Android开发基础之通过系统提供的方法获取到保存文件的路径
- Android 通过反射调用获取内置存储和外置sd卡根路径(适用于各个版本)