当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于Android的多媒体应用开发与研究

摘要: 首先介绍并分析Android 系统的层次架构,并在此基础上介绍Android 应用程序开发的相关技术和基本的开发流程。接下来介绍Android 提供的多媒体开发组件。最后用具体的应用程序---播放器简要说明Android 多媒体应用程序的开发方法。

0 引言

2007 年11 月由Google 牵头,有30 多家移动技术和无线应用领域领先企业组成的开放手机联盟( Open Handset Alliance) 发布了其智能手机平台---Android.Android 是一个开放、自由的移动终端平台,它是由操作系统、中间件、用户界面、应用软件组成,同时其开放性保证该平台不存在任何阻碍移动产业创新的专有权障碍。开发人员在该平台开发的应用程序是使用Java 语言编写的,在Dalvik 虚拟机上运行的。Android 的底层是以开放性的Linux Kernel为其架构,也可以理解为Google 推出的手机操作系统和相关软件的总称[1].

Android 是一套真正意义上的开放性移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android 最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验,Android 里面具有非常丰富的图形系统、对多媒体的支持功能和非常强大的浏览器[2].

Android 平台的开放性等特点既能促进技术( 包括平台自身) 的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定特色化的产品,因此,它具有很大的市场发展潜力。

1 Android 软件平台的构成

Android 软件平台主要由5 部分构成,它们分别是: 关键应用程序、应用程序框架和组件、C /C ++ 函数库、Java 程序运行环境、优化了的Linux 内核。

(1) 关键应用程序。

Android 本身会附带一些核心的应用程序,包括E-mail 客户端、短信程序、日历、地图、浏览器、通讯录等,目前所有的应用程序都是用Java 语言开发的。

更多有特色的Android 应用程序还有待于广大开发者共同参与开发。

(2) 应用程序框架及组件。

Android 应用程序开发基于框架和组件。Android 本身已在其框架中提供了许多组件供应用程序调用,开发者也可在开发应用程序时顺带开发新的组件,并将该组件放入应用程序框架中,以供自己和其它应用程序调用。

(3) Android 运行时库和其它库层。

Android 应用程序框架之下是一套C /C ++ 函数库,它们服务于Android 应用程序组件,其功能通过组件间接提供给开发者。这些函数库包括: 标准C函数库、多媒体库、浏览器引擎( 集成了Web 浏览器和Internet 安全的SSL 和WebKit) 、2D、3D 图形库及SQLite 引擎和外观管理器等。这一层也提供了程序运行的环境。Android 的Java 程序运行环境包含一组Java 核心函数库及Dalvik 虚拟机,它们有效地优化了Java 程序的运行过程。

(4) Linux 内核。

Android 系统平台基于优化了的Linux 内核,它提供诸如硬件驱动程序( USB、蓝牙、显示屏等) 、内存管理、进程管理、电源管理等服务,同时也是手机软、硬件的连接层。

2 Android 程序开发的基本组件

Android 有如下几大基本组件: Activity、Service、CONtent Provider 和BroadcaST Receiver。

Activity 是Android 最基本的应用程序组件。任何一个Android 应用程序都可以看作一组任务,这里每一个任务就可以称作一个Activity.在应用程序中,一个Activity 通常就是一个单独的屏幕,用于呈现数据和与用户进行交互,每个屏幕可以有一个或多个组件布局。

而每一个活动又是一个单独的类,每一个这样的类都要将Activity 作为父类。一个Activity 可以切换到新的Activity,也可以返回前一个Activity.Android 通过使用Intent 类来实现Activity 的切换。例如,一个简单的游戏程序可以分为5 个Activity: 启动画面、主菜单界面、游戏主界面、高分辨和帮助界面。

Service,即"服务"的意思,相当于没有界面的Activity.应用程序的Service 可以不需要用户直接参与而长时间运行。典型的例子就是音乐播放器。在一个音乐播放器程序中有多个Activity,它们分别实现了歌曲的选择和播放等功能。然而,音乐重放这个功能并没有对应的Activity,它通过Service 来实现。

音乐播放器程序启动一个Service,它可以在后台保持音乐的不断播放。应用程序还可以连接到一个Service.当Service 启动后,还可以借助Service 提供的接口与它进行通信。

Android 应用程序可以使用文件、SQL 数据库等各种存储系统来保存数据。但是,如果想实现不同应用之间的数据共享,就需要用到Content Provider.

Content Provider 提供了一套标准的访问接口,以方便其他应用程序对数据进行访问、操作。

在实际应用中,常常需要等待系统或者其它应用发出一道指令。在Android 中,充分考虑了这类需求,于是就有了Broadcast Receiver 这样的一个组件。

每个Broadcast Receiver 都可以接收一种或若干种Intent作为触发事件,当一个Broadcast Receiver 被触发后,系统就会通知相应的程序。

3 Android 多媒体API 及开发方法

多媒体---无论是图像、视频还是声音,都早已成为了移动设备受到广泛欢迎的主要原因。而今,手机设备很少会没有摄像头的,而且随着技术的日益更新,越来越多的设备会拥有更为专业的视频性能。用户经常使用手机来拍摄和浏览照片,录制声音和观看视频。

3. 1 Android 提供的多媒体开发框架

Android 软件开发包提供了一系列的方法来处理音视频媒体,包括对于多种媒体类型和格式的支持。

单独的Android 设备和开发人员可以扩展其支持的媒体格式列表。

Open Core 是Android 多媒体开发的核心,所有Android 平台的音频、视频的采集以及播放等操作都是通过它来实现的。程序员可以通过Open Core 方便快速地开发出想要的多媒体应用程序,例如: 录音、播放、回放、视频会议等。Open Core 和框架图如图1 所示。

图1 Open Core 框架图

由图1 可以看出,Open Core 支持的格式有MPEG4、H. 263、MP3、AAC、JPG 等。Open Core 多媒体框架有一套通用可扩展的接口,针对第三方的多媒体编解码器,输入、输出设备等。

[!--empirenews.page--]

3. 2 Open Core 的主要多媒体类与接口

Open Core 主要提供了如下几个多媒体类:

( 1) MediaPlayer 类可以用于播放音频、视频和流媒体,它包含了Audio 和Video 的播放功能,在Android的界面上,音频和视频的播放都是调用Media-Player 实现的。它可以获得媒体文件和各种属性和当前的播放状态,并可以开始和停止文件的播放。

( 2) MediaRecorder 类用来进行媒体采样,包括音频和视频。MediaRecorder 作为状态机运行,需要设置不同的参数,如源格式和源设备。设置后可执行任意长度的录制,直到用户停止。

( 3) VideoView 类主要用来显示一个视频文件,它是SurfaceView 类的一个子类,且实现了MediaPlayerControl接口。

( 4) Camera 类用来处理系统中与相机相关的事件,Camera 是一个专门用来连接和断开相机服务的类。

Open Core 在使用过程中的调用关系如图2所示。

 

图2 使用Open Core 的调用关系图

4 示例程序: 播放器

4. 1 布局设计

Android 是通过布局( Layout) 来定义UI( 用户界面) 的。一般视图( View) 可以直接在布局的XML 里声明。XML 文件如下所示:

  < ? xml version = ″1. 0″encoding = ″utf-8?″ >

  -< AbsoluteLayout

  xmlns: android = ″http: / /schemas. android. com/apk /res /android″

  android: orientation = ″vertical″

  android: layout_width = ″fill_parent″

  android: layout_height = ″fill_parent″ >

  < ListView

  android: id = ″@ id /android: list″

  android: layout_width = ″fill_parent″

  android: layout_height = ″fill_parent″

  android: layout_weight = ″1″

  android: drawSelectorOnTop = ″false″ / >

  < ImageButton

  android: id = ″@ + id /LastImageButton″

  android: layout_width = ″wrap_content″

  android: layout_height = ″wrap_content″

  android: layout_x = ″10px″

  android: layout_y = ″170px″

  android: src = ″@ drawable /last″ / >

  ( 以下4 个BUTTON 同上,横坐标有变化。)

  < /AbsoluteLayout >

这个简单的播放器只有一个界面,可以显示播放列表和对音乐的播放进行各种操作。

4. 2 程序框架设计

在这唯一的Activity 类的界面生成消息响应方法中,先定义几个操作按钮,然后就要创建整个程序的主对象---mMediaPlayer 了。语句如下:

  public MediaPlayer mMediaPlayer = null;

这是一个MediaPlayer 类型的对象,它的功能前面已经介绍过了,这里不再赘述。之后要创建的就是其它的组件,包括播放列表、歌曲的路径以及索引了。

  private List < String > mMusicList = new ArrayList < String >( ) ; / /播放列表

  private int currentListItme = 0; / /索引

  private static final String MUSIC_PATH = new String( ″ /sdcard/″) ; / /歌曲的路径

4. 3 程序核心代码

接下来设置这些ImageButton 的事件监听。

  mStartImageButton. setOnClickListener(

  new ImageButton. OnClickListener( )

  {

  @ Override public void onClick( View v)

  {

  playMusic( MUSIC_PATH + mMusi-cList. get( currentListItme)

  ) ;

  }

  } ) ;

这是"开始播放"按钮的事件监听。这里是调用了一个playMusic( ) 方法来实现音乐文件的播放的。

在playMusic( ) 方法中,先调用mMediaPlayer 的reset( ) 方法,重置MediaPlayer 到它的正常状态。然后调用setDataSource( string) 方法设置好音乐文件的数据源,再连续调用prepare( ) 和start( ) 方法,MediaPlayer将开始播放音乐文件。

接下来,要设置一个OnCompletionListener ( setOnCompletionListener( new OnCompletionListener ) ) ,在歌曲结束的时候,onCompletion( MediaPlayer) 会被调用,这样就可以设置为自动播放下一曲目。代码如下。

  mMediaPlayer. setOnCompletionListener(

  new OnCompletionListener( )

  {

  public void onCompletion( MediaPlayer arg0)

  {

  nextMusic( ) ; / /播放下一曲

  }

  } ) ;

其它方法与上面方法类似,在"停止"按钮的事件响应方法里,要调用mMediaPlayer 的isPlaying( ) 方法来判断播放器是否正在播放,如果正在播放则调用reset( ) 方法直接重置播放器即可。暂停则可以调用mMediaPlayer 的pause( ) 方法,再次开始播放则调用start( )。

5 结束语

Android 手机应用程序开发需要着眼于它的整个体系构架,这是一项复杂的工程。本文先是介绍并分析了Android 系统的层次架构,并在此基础上介绍了Android 应用程序开发的相关技术和基本的开发流程。接下来介绍了Android 为开发人员提供的简单、易用的多媒体开发组件MediaPlayer、MediaRecorder等类。最后用具体的应用程序简要说明了Android多媒体应用程序的开发方法。Android 具有极大的开放性和兼容性,相信广大开发者可以借助AndroidSDK 提供的强大技术支持,开发出丰富多彩、极具个性的移动应用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭