- 浏览: 159831 次
- 性别:
- 来自: 深圳
最新评论
-
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 50159.4 SystemServer进程的启 ... -
如何向android的framework里添加新类
2011-08-19 16:23 1263http://xxw8393.blog.163.c ... -
java和C设置的系统属性-互相访问
2011-06-23 11:29 1250JAVA import android.os.Syst ... -
Android——init.rc脚本
2011-06-16 10:01 5055http://java-admin.iteye.com/blo ... -
android 增加内部flash时容易忘记的一点-数据库操作-删除文件
2011-05-31 15:06 3077其他中间层做好后,发现在Gallery中无法删除flash(或 ... -
MIPS android 编译总结
2011-05-24 09:29 1999http://www.huomo.cn/developer/a ... -
Android Wifi模块分析(六)
2011-05-09 18:08 1070Android Wifi模块分析(六 ... -
Android Wifi模块分析(五)
2011-05-09 18:05 1039Android Wifi模块分析(五) 本文来自:http: ... -
Android Wifi模块分析(四)
2011-05-09 14:13 1177Android Wifi模块分析(四) 2010-02-08 ... -
Android Wifi模块分析(三)
2011-05-09 14:10 1486Android Wifi模块分析(三) 本文来自:http: ... -
Android Wifi模块分析(一)
2011-05-09 14:09 1694Android Wifi模块分析(一 ... -
Android Wifi模块分析(二)
2011-05-09 14:07 2052Android Wifi模块分析(二) 本文来自:http: ... -
Android Wifi模块分析(总览)
2011-05-09 14:05 1701Android Wifi模块分析(总览) 本文来自:http ... -
关于Android2.2定制出厂默认输入法的一些心得
2011-05-04 14:10 2298有些输入法预制到系统中时默认情况下是不能直接使用的,要在设置- ... -
Android2.2下实现Ethernet上网
2011-05-03 16:19 1650最近在做Android2.2实现Ethernet上网,在网上找 ... -
AIDL(android 接口描述语言)
2011-04-29 10:21 1031http://www.devdiv.com/foru ... -
Android 多媒体扫描过程
2011-04-18 10:25 1219本文来自:http://yueguc.iteye.com/bl ... -
Android学习笔记--Binder
2011-04-15 20:14 9943(一) 概述 android的binder机制 ...
相关推荐
而“Android 简易音乐播放器源码”很可能是整个项目的源代码文件夹,包含了所有的.java或.kt文件,以及可能的资源文件(如图片、xml布局文件等)。 通过学习和分析这个源码,开发者不仅可以掌握Android音乐播放器的...
MediaPlayer是Android自带的音频播放组件,支持多种音频格式,而ExoPlayer则提供了更高级的功能和更好的性能,尤其适合复杂的媒体播放需求。 5. **歌手专辑**:歌手和专辑的信息同样需要从服务器获取,然后在UI上...
音乐播放器通常需要处理音频流的解码和播放,这可能涉及到了如MP3、AAC、FLAC等多种音频格式的支持。开发者可能使用了Android自带的MediaPlayer类或者第三方库如ExoPlayer来实现。视频播放器则需要处理视频流的解码...
`CoverFlow`效果是一种流行的设计模式,通常用于音乐播放器或图片浏览器,它呈现了一个富有立体感的视图,当前选中的元素居中且放大,两侧的元素则以一定的角度偏移并缩小。 要实现`CoverFlow`效果,我们需要做以下...
2. 播放控制:项目使用Android自带的MediaPlayer类来播放音乐。MediaPlayer提供了播放、暂停、停止、快进、后退等基本操作,并支持流媒体播放。 3. 用户界面(UI):UI设计通常包含音乐列表、播放进度条、播放模式...
6. **ExoPlayer**: 虽然不是Android系统自带的组件,但ExoPlayer是由Google开发的一个强大且灵活的媒体播放器库,它比MediaPlayer更适合复杂的应用场景,如自定义渲染、多轨音频、DASH和HLS流媒体支持等。...
这种效果常被应用在音乐播放器等应用中,如将专辑封面图片进行模糊处理,用作背景,以营造出优雅且不干扰主要内容的界面设计。下面我们将深入探讨Android中实现高斯模糊的方法。 1. **基础知识**: - **Bitmap**:...
"ApolloMod"可能是一个音乐播放器应用的修改版,因为原版的Apollo是Android系统自带的音乐播放器。"master"通常指的是Git仓库的主要分支,意味着这是项目的核心版本。 在Android源码学习中,我们主要会涉及到以下几...
通过这个入门资料,你可以逐步学习和实践以上知识点,最终制作出自己的手机播放器、音乐应用或者各种创新的视频软件。随着技术的深入,你还可以学习更多高级主题,如Fragment管理、多进程通信、数据库操作、网络编程...
- **Music.apk**:音乐播放器,支持本地音乐播放。 - **MyFaves.apk**:T-Mobile定制应用程序,提供快速拨号功能。 - **PackageInstaller.apk**:APK安装程序,用于安装新应用程序。 - **Phone.apk**:电话拨号器,...
《MusicPlayer:安卓音乐播放器的设计与实现》 在当今移动设备盛行的时代,音乐播放器作为智能手机必备的应用之一,扮演着至关重要的角色。本篇将深入探讨“MusicPlayer”这款专为安卓平台设计的音乐播放软件,从其...
3. **元数据编辑**:影音管理系统允许用户编辑媒体文件的元数据,如添加封面图片、修改歌曲标题、艺术家信息、专辑详情等,确保媒体库的整洁和准确性。 4. **媒体搜索**:内置强大的搜索引擎是影音管理系统的核心...
Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...