- 浏览: 157237 次
- 性别:
- 来自: 深圳
最新评论
-
yong7356:
学习了。。。。。。。。。。。。
Android 如何建立AIDL -
910310lenfeng:
小有收获
Paint方法setXfermode -
ihopethatwell:
修改/data/data 权限,修改那几处?
Android——init.rc脚本 -
lyltiger:
http://www.qianxk.com wifi分析
Android Wifi模块分析(二) -
liuborama:
...
Android2.2下实现Ethernet上网
音乐播放器是从MediaProvider中获取音乐和音乐信息的,在插入SD卡后,MediaProvider启动扫描服务,文件解析通过opencore操作,扫描到的媒体文件由MediaProvider来保存到数据库,数据库位于
/data/data/com.android.providers.media/databases/external-*.db
在扫描时,扫描到的专辑图片存放于
Android/data/com.android.providers.media/albumthumbs/
专辑图片选用优先选择音乐内嵌专辑图片
如果音乐没有内嵌专辑图片,则在音乐目录下搜索(忽略根目录和下载目录)
0 AlbumArt.jpg
1 AlbumArt*Large.jpg
2 Any other jpg image with 'albumart' anywhere in the name
3 Any other jpg image
4 any other png image
对于扫描的过程,详细可分析文件:
/android-2.2/packages/providers/MediaProvider/src/com/android/providers/media/MediaProvider.java
private ParcelFileDescriptor makeThumbInternal(ThumbData d) ---> getCompressedAlbumArt(getContext(), d.path);
如果音频文件中有专辑图片,用音频里的图片,如果没有,则按如下策略选择图片。
// Extract compressed image data from the audio file itself or, if that fails,
// look for a file "AlbumArt.jpg" in the containing directory.
private static byte[] getCompressedAlbumArt(Context context, String path) {
byte[] compressed = null;
try {
File f = new File(path);
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(f,
ParcelFileDescriptor.MODE_READ_ONLY);
MediaScanner scanner = new MediaScanner(context);
compressed = scanner.extractAlbumArt(pfd.getFileDescriptor());
pfd.close();
// If no embedded art exists, look for a suitable image file in the
// same directory as the media file, except if that directory is
// is the root directory of the sd card or the download directory.
// We look for, in order of preference:
// 0 AlbumArt.jpg
// 1 AlbumArt*Large.jpg
// 2 Any other jpg image with 'albumart' anywhere in the name
// 3 Any other jpg image
// 4 any other png image
if (compressed == null && path != null) {
int lastSlash = path.lastIndexOf('/');
if (lastSlash > 0) {
String artPath = path.substring(0, lastSlash);
String sdroot = Environment.getExternalStorageDirectory().getAbsolutePath();
String dwndir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
String bestmatch = null;
synchronized (sFolderArtMap) {
if (sFolderArtMap.containsKey(artPath)) {
bestmatch = sFolderArtMap.get(artPath);
} else if (!artPath.equalsIgnoreCase(sdroot) &&
!artPath.equalsIgnoreCase(dwndir)) {
File dir = new File(artPath);
String [] entrynames = dir.list();
if (entrynames == null) {
return null;
}
bestmatch = null;
int matchlevel = 1000;
for (int i = entrynames.length - 1; i >=0; i--) {
String entry = entrynames[i].toLowerCase();
if (entry.equals("albumart.jpg")) {
bestmatch = entrynames[i];
break;
} else if (entry.startsWith("albumart")
&& entry.endsWith("large.jpg")
&& matchlevel > 1) {
bestmatch = entrynames[i];
matchlevel = 1;
} else if (entry.contains("albumart")
&& entry.endsWith(".jpg")
&& matchlevel > 2) {
bestmatch = entrynames[i];
matchlevel = 2;
} else if (entry.endsWith(".jpg") && matchlevel > 3) {
bestmatch = entrynames[i];
matchlevel = 3;
} else if (entry.endsWith(".png") && matchlevel > 4) {
bestmatch = entrynames[i];
matchlevel = 4;
}
}
// note that this may insert null if no album art was found
sFolderArtMap.put(artPath, bestmatch);
}
}
if (bestmatch != null) {
File file = new File(artPath, bestmatch);
if (file.exists()) {
compressed = new byte[(int)file.length()];
FileInputStream stream = null;
try {
stream = new FileInputStream(file);
stream.read(compressed);
} catch (IOException ex) {
compressed = null;
} finally {
if (stream != null) {
stream.close();
}
}
}
}
}
}
} catch (IOException e) {
}
return compressed;
}
发表评论
-
SystemServer进程的启动
2012-05-02 16:43 49259.4 SystemServer进程的启 ... -
如何向android的framework里添加新类
2011-08-19 16:23 1232http://xxw8393.blog.163.c ... -
java和C设置的系统属性-互相访问
2011-06-23 11:29 1190JAVA import android.os.Syst ... -
Android——init.rc脚本
2011-06-16 10:01 4997http://java-admin.iteye.com/blo ... -
android 增加内部flash时容易忘记的一点-数据库操作-删除文件
2011-05-31 15:06 3043其他中间层做好后,发现在Gallery中无法删除flash(或 ... -
MIPS android 编译总结
2011-05-24 09:29 1943http://www.huomo.cn/developer/a ... -
Android Wifi模块分析(六)
2011-05-09 18:08 1021Android Wifi模块分析(六 ... -
Android Wifi模块分析(五)
2011-05-09 18:05 989Android Wifi模块分析(五) 本文来自:http: ... -
Android Wifi模块分析(四)
2011-05-09 14:13 1143Android Wifi模块分析(四) 2010-02-08 ... -
Android Wifi模块分析(三)
2011-05-09 14:10 1453Android Wifi模块分析(三) 本文来自:http: ... -
Android Wifi模块分析(一)
2011-05-09 14:09 1647Android Wifi模块分析(一 ... -
Android Wifi模块分析(二)
2011-05-09 14:07 1999Android Wifi模块分析(二) 本文来自:http: ... -
Android Wifi模块分析(总览)
2011-05-09 14:05 1671Android Wifi模块分析(总览) 本文来自:http ... -
关于Android2.2定制出厂默认输入法的一些心得
2011-05-04 14:10 2298有些输入法预制到系统中时默认情况下是不能直接使用的,要在设置- ... -
Android2.2下实现Ethernet上网
2011-05-03 16:19 1586最近在做Android2.2实现Ethernet上网,在网上找 ... -
AIDL(android 接口描述语言)
2011-04-29 10:21 994http://www.devdiv.com/foru ... -
Android 多媒体扫描过程
2011-04-18 10:25 1167本文来自:http://yueguc.iteye.com/bl ... -
Android学习笔记--Binder
2011-04-15 20:14 9905(一) 概述 android的binder机制 ...
相关推荐
android自带音乐播放器 android 自带音乐播放器 eclipse导入即可安装
还有简单的密码验证 开发软件:Android StudioAndroid 开源在线音乐播放器Android 开源在线音乐播放器Android 开源在线音乐播放器Android 开源在线音乐播放器Android 开源在线音乐播放器Android 开源在线音乐播放器...
android studio 音乐播放器.zipandroid studio 音乐播放器.zipandroid studio 音乐播放器.zipandroid studio 音乐播放器.zipandroid studio 音乐播放器.zipandroid studio 音乐播放器.zipandroid studio 音乐播放器....
android简单音乐播放器的播放,暂停,前一首,后一首的控制。简单音乐播放器的播放,暂停,前一首,后一首的控制。简单音乐播放器的播放,暂停,前一首,后一首的控制。简单音乐播放器的播放,暂停,前一首,后一首...
Android 自带应用音乐播放器源代码
Android简易本地音乐播放器源码,基于Android的简易本地音乐播放器源码
Android实例源码-音乐播放器类安卓源代码(9例) ...简单音乐播放器,实现了播放器基本功能,使用service后台播放音乐,并使用异步线程加载音乐图片 边下载边播music 音乐播放器 音乐播放器 音乐播放器源码
android studio手机MP3音乐播放器
调用Android自带的播放器播放Audio
这是我的优秀课程设计,移动应用开发课期末的课程报告,包含实验目的、实验内容、程序设计和说明...每部分都写的很详细,具体的源码在我的博客《Android Studio实现音乐播放器》里面,这份课程设计报告和它是配套的。
包括Android 移动开发基础案例教程课本中第七章实战演练——注册用户信息的源代码,可用Android studio运行,适合初学者学习。
基于Android的音乐播放器的设计与实现20150417 需求报告 演示视频.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android自定义音乐播放器
Android Studio工程,音乐播放器,实现递归扫描SD根目录歌曲文件,切换播放模式、查看歌曲详细信息等基本功能,相应博文地址http://blog.csdn.net/djstavaV/article/details/47726675
一个Android在线音乐播放器的源代码,比较适合学习用!!!
一个用Android实现的支持登录注册的简单音乐播放器
基于Android Studio开发的音乐播放器APP源码Android 音乐播放器源码
android 音乐播放器 经典完整代码 非常经典 非常好用 绝对是原创的哦 绝对可以使用的哦 学习之良品,项目代码涉及知识非常广泛,可以通过本项目代码学习到android的四大组件 以及很多编程技巧 希望各位同学好好利用.
android简单音乐播放器
Android应用源码简洁大气的Hide音乐播放器源码Android应用源码简洁大气的Hide音乐播放器源码