Android开发工程师教案8第八章多媒体与网络应用开发技术.docx
- 文档编号:25413984
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:29
- 大小:29.60KB
Android开发工程师教案8第八章多媒体与网络应用开发技术.docx
《Android开发工程师教案8第八章多媒体与网络应用开发技术.docx》由会员分享,可在线阅读,更多相关《Android开发工程师教案8第八章多媒体与网络应用开发技术.docx(29页珍藏版)》请在冰豆网上搜索。
Android开发工程师教案8第八章多媒体与网络应用开发技术
智能手机开发教案
周次
第周,第次课
授课时间
20年月日/星期
授课时数
10
章节
名称
第8章多媒体与网络应用开发技术
授课
方式
课堂讲授(√);实验课();多媒体教学();网络教学();双语()
教学
目的
1.理解Android系统中多媒体组件的体系结构和原理;2.掌握Android系统中MediaPlayer、MediaRecoder、VideoView、Camera、AlarmManager、SmsManager等多媒体类的常用方法;3.理解Socket、HTTP和WebService这3种技术的原理
教学重点
1.MediaPlayer类的使用;2.Http和Socket通信的原理
教学
难点
Http和Socket通信的原理
教学
方法
讲授+实验
教学
环境
教学
用具
多媒体教学设备
教 学 过程及内 容
备注
8.1概述
8.1.1多媒体技术介绍
Android软件开发包提供了一系列的方法来处理音、视频媒体,包括对于多种媒体类型和格式的支持。
单独的Android设备和开发人员可以扩展其支持的媒体格式列表。
OpenCore,也称为PacketVideo,它是Android多媒体框架的核心。
与其他Android程序库相比,OpenCore的代码非常庞大,它是一个基于C++的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。
程序员可以通过OpenCore方便迅速地开发出想要的多媒体应用程序,如录音、播放、回放、视频会议、流媒体播放等。
OpenCore是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容。
(1)PVPlayer:
提供媒体播放器的功能,实现各种音频(Audio)、视频(Video)流的回放(Playback)。
(2)PVAuthor:
提供媒体流记录的功能,实现各种音频(Audio)、视频(Video)流以及静态图像的捕获。
PVPlayer和PVAuthor以SDK的形式提供给开发者,开发者可以在这个SDK之上构建多种应用程序和服务。
OpenCore主要提供了如下几个多媒体类。
教 学 过程及内 容
备注
MediaPlayer类,可以用于播放音频、视频和流媒体,它包含了Audio和Video的播放功能,在Android的界面上,音频和视频的播放都是调用MediaPlayer实现的。
它可以获得媒体文件和各种属性当前的播放状态,并可以开始和停止文件的播放。
MediaRecorder类,用来进行媒体采样,包括音频和视频。
MediaRecorder作为状态机运行,需要设置不同的参数,如源格式和源设备。
设置后可以执行任意长度的录制,直到用户停止。
VideoView类,主要用来显示一个视频文件,它是SurfaceView类的一个子类,且实现了MediaControl接口。
Camera类,用来处理系统中与相机相关的事件,Camera是一种专门用来连接和断开相机服务的类。
8.1.2网络技术介绍
Android平台基于应用层的网络通信技术与Java几乎完全一样,可以使用Socket、HTTP和WebService这3种技术进行Android平台的网络应用开发。
1.Socket通信
Socket是一种低级、原始的通信方式,要编写服务器端代码和客户端代码,自己开端口,自己制定通信协议、验证数据安全和合法性,而且通常还应该是多线程的,开发起来比较烦琐。
但是它也有其优点:
灵活,不受编程语言、设备、平台和操作系统的限制,通信速度快而高效。
在Java中Socket相关类都在包中,其中主要的类是Socket和ServerSocket。
Android平台下的开发方法与Java完全一样,感兴趣的读者可以查阅Java网络编程资料。
2.HTTP协议通信
HTTP通信技术是网络应用中最为常用的技术之一,客户端向服务器发出HTTP请求,服务器接收到客户端的请求后,处理客户端的请求,处理完成后再通过HTTP将应答传回给客户端。
在Java网络编程中,客户端一般是浏览器,但Android平台客户端是指安装了Android系统的智能终端,服务器一般是HTTP服务器,HTTP请求方法有POST、GET等方法。
HTTP通信编程可以使用Java的,但是这个类只能发出GET请求;也可以使用Apache组织()提供的HttpClient类库,HttpClient类库已经集成到Android平台中,使用很方便。
3.WebService
WebService(Web服务)是一种基于XML和HTTP技术的服务,它也是部署在Web服务器上、由Web服务器管理的。
它使得不同计算机语言、不同计算机平台之间的方法调用成为可能,是远程调用和分布式系统的重要实现手段。
与HTTP通信方式相比,HTTP不能实现远程方法的调用,而WebService可以。
8.2音频播放器的设计与实现
8.2.1预备知识
AndroidSDK提供了MediaPlayer类,以便在Android系统中实现多媒体服务,如音频、视频的播放等。
这个类的常用方法见表8-1(教材上)。
教 学 过程及内 容
备注
表8-2MediaPlayer类的常用事件
事件名
功能
setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenerlistener)
监听事件,网络流媒体的缓冲监听
setOnCompletionListener(MediaPlayer.OnCompletionListenerlistener)
监听事件,网络流媒体播放结束监听
setOnErrorListener(MediaPlayer.OnErrorListenerlistener)
监听事件,设置错误信息监听
setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListenerlistener
监听事件,视频尺寸监听
8.2.2音频播放器界面设计
1.准备所需的Icons和Images
设计音频播放器界面时,可以使用一些平面设计软件(如PhotoShop)来设计界面背景图片、基本按钮图标等,这里直接从互联网下载图片来修饰用户界面。
为了突出操作按钮后的不同状态,可以准备不同状态下的图标,如默认、聚焦、按下等,然后将这些不同状态的图标放在drawable文件夹下。
2.设计不同状态的Icon布局
保存所有不同状态的图标之后,需要为每一个Icon设计布局,下面是一个PlayButton的布局文件btn_play.xml,创建后保存在drawable文件夹下。
btn_play.xml文件源代码如下:
android="/res/android"> drawable="@drawable/playfocused" android: state_focused="true"android: state_pressed="true"/> drawable="@drawable/playfocused" android: state_focused="false"android: state_pressed="true"/> drawable="@drawable/playfocused" android: state_focused="true"/> drawable="@drawable/playdefault" android: state_focused="false"android: state_pressed="false"/> 注意: 其他的Icon的布局源代码与btn_play.xml文件源代码类似,由读者自行完成。 3.设计SeekBar布局 为了显示歌曲播放进展,可以使用默认风格的SeekBar,也可以使用XML样式定制SeekBar。 这里使用XML样式定制,在drawable文件夹下创建如表8-3所示的XML文件。 教 学 过程及内 容 备注 表8-3SeekBar布局文件 文件名 作用 seekbar_progress_bg.xml 改变SeekBar的背景样式(不使用默认的) seekbar_progress.xml 改变SeekBar的进度条样式 seekbar_progress_bg.xml文件源代码如下: xmlversion="1.0"encoding="utf-8"? > android="/res/android"> android="/res/android" android: src="@drawable/seekbarprogress"android: tileMode="repeat" android: antialias="true"android: dither="false"android: filter="false" android: gravity="left"/> 4.界面布局代码(略): 5.设计播放列表 使用列表视图(ListView)显示播放列表,在drawable文件夹中创建一个背景选择器布局文件list_selector.xml。 list_selector.xml文件源代码如下: xmlversion="1.0"encoding="utf-8"? > android="/res/android"> state_selected="false"android: state_pressed="false" android: drawable="@drawable/gradient_bg"/> state_pressed="true"android: drawable="@drawable/gradient_bg_hover"/> state_selected="true"android: state_pressed="false" android: drawable="@drawable/gradient_bg_hover"/> 在drawable文件夹下创建一个显示列表视图布局文件playlist.xml。 playlist.xml文件源代码如下: xmlversion="1.0"encoding="utf-8"? > android="/res/android" android: layout_width="fill_parent"android: layout_height="fill_parent" android: orientation="vertical"> id="@android: id/list"android: layout_width="fill_parent" android: layout_height="fill_parent"android: divider="#242424" android: dividerHeight="1dp"android: listSelector="@drawable/list_selector"/> …… 教 学 过程及内 容 备注 6.读取SDCard中的mp3文件 为了读取SDCard中的mp3格式文件,可以从设备上的SDCard中阅读所有文件并且过滤出含有.mp3后缀的文件。 本例中创建一个类文件SongsManager.java用于读取SDCard中的mp3文件,其源代码如下: publicclassSongsManager{ StringMEDIA_PATH=newString(""); privateArrayList 7.实现播放列表界面 从SDCard中读出mp3格式文件后,将它们显示在播放列表界面上,通过继承ListActivity类来创建一个新类PlayListActivity.java实现此功能。 该类中使用上面的SongsManager.java类来显示歌曲列表。 效果如图8.2所示。 其源代码如下: publicclassPlayListActivityextendsListActivity{ publicArrayList HashMap @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(; ArrayList HashMap 8.实现辅助类 创建一个Utilities.java类,用来将时间格式设置为时: 分: 秒;将毫秒定时器转换为时间字符串显示在播放器的SeekBar上等。 其源代码如下: publicclassUtilities{ /*将时间统一设置为时: 分: 秒的格式*/ publicStringmilliSecondsToTimer(longmilliseconds){ StringfinalTimerString=""; StringsecondsString=""; inthours=(int)(milliseconds/(1000*60*60)); 9.实现主界面所有播放功能 主界面所有播放功能是通过继承了OnCompletionListener类和SeekBar.OnSeekBarChangeListener类的MainActivity.java类中编写的相关事件代码实现的。 (1)加载播放列表界面。 为主界面上 按钮(btnPlaylist)编写单击事件监听器,当单击该按钮时加载PlayListAcitivity.java类,在播放列表界面选中一首特定的歌曲后需要返回该歌曲在列表中的索引号songIndex。 其源代码如下: btnPlaylist.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ Intenti=newIntent(getApplicationContext(),PlayListActivity.class); startActivityForResult(i,100); } }); 教 学 过程及内 容 备注 8.3视频播放器的设计与实现 8.3.1预备知识 上节已经介绍过,Android平台提供android.media包来管理各种音频和视频的媒体接口,该包中的MediaPlayer类(媒体播放器接口)用于控制音频或视频文件和流的回放,根据该类提供的方法来实现音频播放已经比较简单了,但是为了完善其功能还需要控制各种状态,对于视频还需要设置输出窗口。 所以在android.widget包中还提供了VideoView(视频视图)组件用于播放视频文件,以简化相对于使用MediaPlayer播放视频的繁琐控制过程。 VideoView组件是调用MediaPlayer实现视频播放的,它的作用与ImageView类似,ImageView用来显示图片,VideoView用来播放视频。 Android自带的程序Gallery也是用VideoView实现的。 8.3.2视频播放器的实现 1.MediaPlayer MediaPlayer类可以用于播放音频和视频,通过设置它的setDataSource()方法可以指定音频或视频的文件路径。 而与播放音频数据不同的是,视频播放还要设置显示视频内容的输出界面,此时可以使用SurfaceView控件,将它与MediaPlayer结合起来,就可以实现视频输出了。 为了管理SurfaceView,Android提供了一个SurfaceHolder接口;SurfaceView用于显示,SurfaceHolder用于管理显示的SurfaceView对象。 SurfaceView是视图(View)的一个继承类,每一个SurfaceView都内嵌封装一个Surface(Surface上Android的一个重要元素,用于Android界面的图形绘制)。 通过调用SurfaceHolder可以调用SurfaceView,控制图形的尺寸和大小,而SurfaceHolder对象是由getHold()方法获得的,创建SurfaceHolder对象后,用SurfaceHolder.Callback()方法回调SurfaceHolder,对SurfaceView进行控制。 实现步骤如下。 (1)创建MediaPlayer对象,并设置加载的视频文件。 (2)在界面布局文件中定义SurfaceView控件。 (3)通过MediaPlayer.setDisplay(SurfaceHoldersh)来指定视频画面输出到SurfaceView之上。 (4)通过MediaPlayer的其他一些方法播放视频。 布局文件源代码如下: 功能实现部分源代码如下: privatevoidplay(){ try{ mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置需要播放的视频 mediaPlayer.setDataSource("mnt/sdcard/lesson2.flv"); //把视频画面输出到SurfaceView mediaPlayer.setDisplay(; mediaPlayer.prepare(); ; …… 教 学 过程及内 容 备注 2.VideoView 用VideoView组件实现视频播放时,必须在布局文件中定义两个组件。 (1)VideoView组件,用于视频输出。 (2)MediaController组件,用于控制视频播放,即用于控制该视频文件的播放行为(如暂停、前进、后退和进度拖曳等)。 VideoView类包含的常用方法和事件,上节已详细介绍。 MediaController类是android.widget包下的,它包含控制MediaPlayer多媒体播放的组件,如“播放”、“暂停”、“快退”、“快进”、“进度条”等。 使用VideoView组件实现视频播放的基本步骤如下。 (1)在布局文件上定义VideoView组件。 (2)调用VideoView的两个方法(两者选一)来加载指定的视频。 ①setVideoPath(Stringpath),加载path文件代表的视频。 ②setVideoUri(Uriuri),加载uri所对应的视频。 (3)调用VideoView的start()、stop()、pause()方法来控制视频的播放。 8.4录音机的设计与实现 Android多媒体框架支持对常见音频的录制和编码,如果硬件支持,可以使用MediaRecorderAPIs非常方便地编写音频程序。 所以只需要Android设备带麦克风就可以录制声音。 当然,Android模拟器不支持录制声音的功能,读者在开发录音机应用时必须有实际设备。 8.4.1预备知识 录制后的音频文件需要以文件名保存在SDCard的目录下,此时需要使用File类中的createTempFile(Stringprefix,Stringsuffix,Filedirectory)方法生成文件,其中prefix参数表示文件名前缀,suffix参数表示文件名后缀,directory表示文件存储位置;存储位置需要使用)方法获得SDCard的默认位置,然后根据需要,在此位置下创建存储音频文件的子目录。 具体实现读者可以参见代码包中Chap08_04_01文件夹里的内容。 8.4.2录音机的实现 声音的录制比音频或者视频的播放复杂,但一般按照如下步骤实现。 (1)使用 (2)使用MediaRecorder.setAudioSource()方法设置音频来源。 (3)使用MediaRecorder.setOutputFormat()设置输出音频格式。 (4)使用MediaRecorder.setAudioEncorder()设置输出编码格式。 (5)使用MediaRecorder.setOutputFile()方法设置输出文件名。 (6)在开始录制之前调用MediaRecorder.prepare()方法。 (7)调用MediaRecorder.start()方法开始录制声音。 (8)调用MediaRecorder.stop()方法停止录制声音。 (9)录制完声音调用MediaRecorder.release()方法释放占用的相关资源。 另外,在使用麦克风进行录音时,必须给应用程序授予录音的权限,即在AndroidManifest.xml配置文件中增加如下代码: name=""/> 教 学 过程及内 容 备注 8.5照相机的设计与实现 在使用系统相机拍照功能时,利用自己编写的Activity调用系统相机的Activity,然后当系统相机的Activity关闭后,返回相片数据给自己编写的Activity,这个过程需要使用如下两个方法。 (1)打开新的Activity方法: startActivityForResult(Intentintent,intrequestCode);第一个参数为表示码,即调用该方法传递过去的值,第二个参数为结果码,即用于标识返回数据来自哪个新Activity。 (2)新的Activi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 开发 工程师 教案 第八 多媒体 网络 应用 技术