`
suiyuchen
  • 浏览: 30504 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android音乐播放器系列讲解之一

阅读更多

从07年末到现在,Android如火如荼的发展,网上已经有很多Android基本技术的文章视频了。我就不重复发明轮子了。目前比较缺少深入讲解Android系统自带应用的分析资料。Android系统自带的应用对于开发类似功能的应用有很大的参考价值。

从关注Android到做Android系统开发、应用开发也有一年多的时间了,期间做手机时需要修复Android源代码的一些bug,对Android系统有了大概的了解,感觉到Android的确是一个设计很好、实现一般的系统。后来陆续参与开发了4个商用的APP。对多媒体这一块儿了解还是比较多一些。下面就从Android系统自带的音乐播放器开始讲解。希望达到的目的是:大家参照我的系列文档,能够快速开发出基于Android平台的音乐播放器,开发者要做的是Design和差异化的功能。Design这一方面我还是比较欠缺的。希望出现好的设计打败目前的几个音乐播放器。

进入正题。首先概要介绍一下Android平台对音乐播放器提供的支持。Android系统对音乐播放提供了很多很好的支持,有了这些支持,开发减少了很多需要关注的细节,可以把精力集中在自己应用的独特性上,比如UI、交互、特色功能等。

对于基于Android平台开发应用的开发者,依赖的是Android的java框架和其他系统自带的应用,就音乐播放器开发者而言,比较方便的做法是使用Android的多媒体框架提供的支持(当然有实力也可以完全自己实现)。

下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些。

1. MediaScannerReceiver

这个广播接收者在接收到ACTION_BOOT_COMPLETED、ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SCANNER_SCAN_FILE 广播时对SD卡中的图片、音乐和视频文件进行了扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService,扫描的文件类型如下:

/* Audio */
addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg");
addFileType("M4A", FILE_TYPE_M4A, "audio/mp4");
addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav");
addFileType("AMR", FILE_TYPE_AMR, "audio/amr");
addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");
addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma");
addFileType("OGG", FILE_TYPE_OGG, "application/ogg");
addFileType("MID", FILE_TYPE_MID, "audio/midi");
addFileType("XMF", FILE_TYPE_MID, "audio/midi");
addFileType("RTTTL", FILE_TYPE_MID, "audio/midi");
addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi");
addFileType("IMY", FILE_TYPE_IMY, "audio/imelody");

/* Video */
addFileType("MP4", FILE_TYPE_MP4, "video/mp4");
addFileType("M4V", FILE_TYPE_M4V, "video/mp4");
addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp");
addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp");
addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2");
addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2");
addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv");

/* Image */
addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg");
addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg");
addFileType("GIF", FILE_TYPE_GIF, "image/gif");
addFileType("PNG", FILE_TYPE_PNG, "image/png");
addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp");
addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp");

/* Audio Play List */
addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl");
addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls");
addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl");

扫描结束后写入到数据库中。

其他的应用程序通过接收MediaScannerService发出的ACTION_MEDIA_SCANNER_STARTED 和ACTION_MEDIA_SCANNER_FINISHED意图能够知道什么时候扫描操作开始和结束。

2. MediaProvider

对于存入数据库的多媒体信息,MediaProvider提供了数据访问的接口。MediaProvider继承了ContentProvider,我们先来看一下数据查询接口:

Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

Uri:指明要查询的数据库名称加上表的名称,从MediaStore中我们可以找到相应信息的参数,具体请参考开发文档。
Projection: 指定查询数据库表中的哪几列,返回的游标中将包括相应的信息。Null则返回所有信息。
selection: 指定查询条件
selectionArgs:参数selection里有 ?这个符号是,这里可以以实际值代替这个问号。如果selection这个没有?的话,那么这个String数组可以为null。
SortOrder:指定查询结果的排列顺序


下面的命令将返回所有在外部存储卡上的音乐文件的信息:
Cursor cursor = query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);



获取ID标签中的歌曲的专辑名:MediaStore.Audio.Media.ALBUM
String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
其他具体参数请参考MediaStore类。

第一讲就到这里,最近比较忙,更新较慢,有问题请发邮件。



分享到:
评论

相关推荐

    Androdi音乐播放器(歌词同步)

    总的来说,开发一个具备歌词同步功能的Android音乐播放器,需要掌握Android SDK的使用,理解音频处理原理,精通UI设计,熟悉数据存储方法,并能处理网络请求和数据解析。通过不断学习和实践,开发者可以打造出功能...

    Android应用开发之简易、大气音乐播放器实现专辑倒影效果

    在Android应用开发中,创建一个简易而大气的音乐播放器时,添加专辑封面的倒影效果可以极大地提升用户体验和视觉吸引力。本教程将重点讲解如何在Android应用中实现这一功能。首先,我们需要理解专辑倒影效果的本质,...

    Android开发系列视频教程及其实例源码地址

    - **定义**:服务是Android应用中的四大组件之一,它是在后台长时间运行的任务,不提供用户界面。 - **创建与启动**:通过继承`Service`类来创建自己的服务,并通过`startService()`或`bindService()`方法启动。 - *...

    《Android视频教程》第一季源代码 打包

    这些项目可能包括简单的Hello World应用、天气查询应用、音乐播放器、社交网络客户端等,覆盖了Android开发的各个方面。 此外,Mars老师还会讲解Android Studio的使用,这是目前最流行的Android集成开发环境,提供...

    Android编程之播放器MediaPlayer实现均衡器效果示例

    总的来说,这个示例展示了如何在Android应用中实现一个基本的音乐播放器,并添加均衡器功能。开发者可以根据实际需求扩展这个示例,比如添加更多的音频效果,如混响或音量淡入淡出,或者设计更丰富的用户交互界面。...

    android activity启动模式详解

    这样可以确保Activity不会被其他Activity干扰,常用于需要隔离的特殊场景,如音乐播放器后台服务。 实际开发中,开发者可以通过在AndroidManifest.xml中为Activity指定launchMode属性来设置启动模式。例如: ```...

    android视频教材代码30多集

    Android作为全球最受欢迎的智能手机操作系统之一,其开发技术深受程序员的追捧。本资源为“android视频教材代码30多集”,包含了一系列深入浅出的编程实例,旨在帮助开发者掌握Android应用开发的核心技能。下面将对...

    AppInventor零基础Android移动应用开发-谷歌精品课程-浙江大学城市学院-吴明晖

    8. **实战项目**:通过一系列实际项目,如计步器、天气查询应用、音乐播放器等,将所学知识融会贯通,提升实践能力。 这门课程对于想要踏入移动应用开发领域的新手来说是一份宝贵的资源,不仅提供了理论知识,还有...

    类微信播放音频帧动画实现

    本文将深入讲解如何实现这一功能,主要关注Android平台,因为Android是目前最广泛使用的移动操作系统之一。 首先,我们需要了解帧动画的基本概念。帧动画是一种将一系列静态图像连续播放,形成动态效果的技术。在...

    curso-android

    最后,课程将通过一系列实战项目,如天气查询应用、音乐播放器、社交网络客户端等,让学员将所学知识应用于实际,提升解决问题的能力。通过这些项目,学员不仅能够巩固理论知识,还能积累项目经验,为将来的工作或...

    qt学习全套视频

    - **案例设计**:选择一个具体的项目案例,如音乐播放器、图片浏览器等,进行需求分析。 - **实现过程**:详细介绍项目的实现流程,包括界面设计、功能实现、调试优化等环节。 - **问题解决**:在开发过程中遇到的...

Global site tag (gtag.js) - Google Analytics