1、教学目标 理解Android系统中多媒体组件的体系结构和原理。掌握Android系统中MediaPlayer、MediaRecoder、VideoView、Camera、AlarmManager、SmsManager等多媒体类的常用方法。掌握使用Android系统中的多媒体类开发多媒体应用软件的方法。理解Socket、HTTP和Web Service这3种技术的原理。掌握Socket、HTTP和Web Service这3种技术进行Android平台的网络应用开发的方法。目录概述概述音频播放器的设计与实现音频播放器的设计与实现视频播放器的设计与实现视频播放器的设计与实现录音机的设计与实现录音机的
2、设计与实现照相机的设计与实现照相机的设计与实现闹钟的设计与实现闹钟的设计与实现定时短信发送器的设计与实现定时短信发送器的设计与实现Android聊天室的设计与实现聊天室的设计与实现在线英汉双译字典的设计与实现在线英汉双译字典的设计与实现天气预报查询系统的设计与实现天气预报查询系统的设计与实现本章小结本章小结项目实训项目实训 概 述 多媒体技术介绍 Android软件开发包提供了一系列的方法来处理音、视频媒体,包括对于多种媒体类型和格式的支持。Open Core,也称为PacketVideo,它是Android多媒体框架的核心。与其他Android程序库相比,Open Core的代码非常庞大,它
3、是一个基于C+的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。程序员可以通过Open Core方便迅速地开发出想要的多媒体应用程序,如录音、播放、回放、视频会议、流媒体播放等。OpenCore 是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容。(1)PVPlayer:提供媒体播放器的功能,实现各种音频(Audio)、视频(Video)流的回放(Playback)。(2)PVAuthor:提供媒体流记录的功能,实现各种音频(Audio)、视频(Video)流以及静态图像的捕获。PVPlayer和PVAuthor 以 SDK 的
4、形式提供给开发者,开发者可以在这个SDK之上构建多种应用程序和服务。概 述 Open Core主要提供了如下几个多媒体类。MediaPlayer类,可以用于播放音频、视频和流媒体,它包含了Audio和Video的播放功能,在Android的界面上,音频和视频的播放都是调用MediaPlayer实现的。它可以获得媒体文件和各种属性当前的播放状态,并可以开始和停止文件的播放。MediaRecorder类,用来进行媒体采样,包括音频和视频。MediaRecorder作为状态机运行,需要设置不同的参数,如源格式和源设备。设置后可以执行任意长度的录制,直到用户停止。VideoView类,主要用来显示一个
5、视频文件,它是SurfaceView类的一个子类,且实现了MediaControl接口。Camera类,用来处理系统中与相机相关的事件,Camera是一种专门用来连接和断开相机服务的类。概 述网络技术介绍 1Socket通信 Socket是一种低级、原始的通信方式,要编写服务器端代码和客户端代码,自己开端口,自己制定通信协议、验证数据安全和合法性,而且通常还应该是多线程的,开发起来比较烦琐。但是它也有其优点:灵活,不受编程语言、设备、平台和操作系统的限制,通信速度快而高效。在Java中Socket相关类都在包中,其中主要的类是Socket和ServerSocket。Android平台下的开发方
6、法与Java完全一样,感兴趣的读者可以查阅Java网络编程资料。2HTTP协议通信 HTTP通信技术是网络应用中最为常用的技术之一,客户端向服务器发出HTTP请求,服务器接收到客户端的请求后,处理客户端的请求,处理完成后再通过HTTP将应答传回给客户端。在Java网络编程中,客户端一般是浏览器,但Android平台客户端是指安装了Android系统的智能终端,服务器一般是HTTP服务器,HTTP请求方法有POST、GET等方法。HTTP通信编程可以使用Java的.URL类,但是这个类只能发出GET请求;也可以使用Apache组织(http:/www.apache.org)提供的HttpClie
7、nt类库,HttpClient类库已经集成到Android平台中,使用很方便。概 述 3Web Service Web Service(Web服务)是一种基于XML和HTTP技术的服务,它也是部署在Web服务器上、由Web服务器管理的。它使得不同计算机语言、不同计算机平台之间的方法调用成为可能,是远程调用和分布式系统的重要实现手段。与HTTP通信方式相比,HTTP不能实现远程方法的调用,而Web Service可以。例如,在Android客户端编写一个Web Service客户端程序,假设是一个用户登录程序,将用户名和口令以参数的形式传递给远程的Web Service,由远程Web Servi
8、ce处理这个调用,然后再将结果返回给客户端。Web Service是构建分布式系统的重要手段,涉及的技术比较复杂。由于Android平台目前没有提供Web Service客户端开发类库,只能借助第三方的Web Service客户端开发类库。KSOAP2是目前在Android平台应用最为广泛的客户端开发类库。KSOAP2是一个SOAP Web Service客户端包,读者可以到http:/ 任务:引用MediaPlayer类来设计一个简单的音频播放器,包括播放、暂停、前进、后退、下一首、前一首、播放列表和进度条等基本组件,能从SD Card上读出所有音频文件,然后播放选中的歌曲。音频播放器的设计
9、与实现 预备知识 Android SDK提供了MediaPlayer类,以便在Android系统中实现多媒体服务,如音频、视频的播放等。这个类的常用方法见表8-1。音频播放器的设计与实现 MediaPlayer类的常用事件见表8-2。音频播放器的设计与实现 音频播放器界面设计 1准备所需的Icons和Images设计音频播放器界面时,可以使用一些平面设计软件(如PhotoShop)来设计界面背景图片、基本按钮图标等,这里直接从互联网下载图片来修饰用户界面。为了突出操作按钮后的不同状态,可以准备不同状态下的图标,如默认、聚焦、按下等,然后将这些不同状态的图标放在drawable文件夹下。2设计不
10、同状态的Icon布局保存所有不同状态的图标之后,需要为每一个Icon设计布局,下面是一个Play Button的布局文件btn_play.xml,创建后保存在drawable文件夹下。btn_play.xml文件源代码如下:音频播放器的设计与实现 3设计SeekBar布局为了显示歌曲播放进展,可以使用默认风格的SeekBar,也可以使用XML样式定制SeekBar。这里使用XML样式定制,在drawable文件夹下创建如表8-3所示的XML文件。seekbar_progress_bg.xml文件源代码如下:音频播放器的设计与实现 seekbar_progress.xml文件源代码如下:音频播放
11、器的设计与实现 4设计音乐播放器布局 前面已完成了所有图标、SeekBar的XML布局,现在需要将它们组合起来实现音乐播放器的布局设计,即在layout文件夹中创建一个新文件musicplayer.xml。musicplayer.xml文件源代码见备注:音频播放器的设计与实现 5设计播放列表使用列表视图(ListView)显示播放列表,在drawable文件夹中创建一个背景选择器布局文件list_selector.xml。list_selector.xml文件源代码如下:在drawable文件夹下创建一个显示列表视图布局文件playlist.xml。playlist.xml文件源代码如下:在d
12、rawable文件夹下创建一个单一列表项显示歌曲标题的布局文件playlist_item.xml。playlist_item.xml文件源代码如下:音频播放器的设计与实现 6读取SD Card中的mp3文件 为了读取SD Card中的mp3格式文件,可以从设备上的SD Card中阅读所有文件并且过滤出含有.mp3后缀的文件。本例中创建一个类文件SongsManager.java用于读取SD Card中的mp3文件,其源代码见备注:音频播放器的设计与实现 7实现播放列表界面 从SD Card中读出mp3格式文件后,将它们显示在播放列表界面上,通过继承ListActivity类来创建一个新类Pla
13、yListActivity.java实现此功能。该类中使用上面的SongsManager.java类来显示歌曲列表。其源代码见备注:音频播放器的设计与实现 8实现辅助类 创建一个Utilities.java类,用来将时间格式设置为时:分:秒;将毫秒定时器转换为时间字符串显示在播放器的SeekBar上等。其源代码如下:音频播放器的设计与实现9实现主界面所有播放功能主界面所有播放功能是通过继承了OnCompletionListener类和SeekBar.OnSeekBarChange Listener类的MainActivity.java类中编写的相关事件代码实现的。(1)加载播放列表界面。为主界
14、面上按钮(btnPlaylist)编写单击事件监听器,当单击该按钮时加载PlayListAcitivity.java类,在播放列表界面选中一首特定的歌曲后需要返回该歌曲在列表中的索引号songIndex。其源代码如下:btnPlaylist.setOnClickListener(new OnClickListener()public void onClick(View v)Intent i=new Intent(getApplicationContext(),PlayListActivity.class);startActivityForResult(i,100););接收播放列表界面选定歌曲
15、索引号的源代码如下:protected void onActivityResult(int requestCode,int resultCode,Intent data)super.onActivityResult(requestCode,resultCode,data);if(resultCode=100)currentSongIndex=data.getExtras().getInt(songIndex);/播放选中歌曲 playSong(currentSongIndex);音频播放器的设计与实现(2)播放歌曲。创建一个playSong(int songIndex)方法来实现歌曲的播放,该
16、方法接收songIndex作为参数并播放,并且在开始播放歌曲时将播放按钮更改为暂停按钮状态。其源代码如下:private void playSong(int songIndex)try mp.reset();mp.setDataSource(songsList.get(songIndex).get(songPath);mp.prepare();mp.start();/显示歌曲标题 String songTitle=songsList.get(songIndex).get(songTitle);songTitleLabel.setText(songTitle);/将播放按钮更改为暂停按钮 btn
17、Play.setImageResource(R.drawable.btn_pause);songProgressBar.setProgress(0);songProgressBar.setMax(100);/更新进度条 updateProgressBar();catch(IllegalArgumentException e)e.printStackTrace();catch(IllegalStateException e)e.printStackTrace();catch(IOException e)e.printStackTrace();音频播放器的设计与实现(3)更新SeekBar的进度和
18、时间。使用一个Handler,运行一个后台线程,并使用Utilities.java类中定义的相关方法实现歌曲播放时间及已播放时间的显示。其源代码如下:private void updateProgressBar()mHandler.postDelayed(mUpdateTimeTask,100);private Runnable mUpdateTimeTask=new Runnable()public void run()long totalDuration=mp.getDuration();long currentDuration=mp.getCurrentPosition();/显示歌曲播
19、放时间 songTotalDurationLabel.setText(+utils.milliSecondsToTimer(totalDuration);/显示歌曲已播放时间 songCurrentDurationLabel.setText(+utils.milliSecondsToTimer(currentDuration);/更新进度条 int progress=(int)(utils.getProgressPercentage(currentDuration,totalDuration);songProgressBar.setProgress(progress);mHandler.pos
20、tDelayed(this,100);/*用户拖动进度条时 */public void onStartTrackingTouch(SeekBar seekBar)mHandler.removeCallbacks(mUpdateTimeTask);/*用户停止拖动进度条时 */public void onStopTrackingTouch(SeekBar seekBar)mHandler.removeCallbacks(mUpdateTimeTask);int totalDuration=mp.getDuration();int currentPosition=utils.progressToT
21、imer(seekBar.getProgress(),totalDuration);/查到当前播放位置 mp.seekTo(currentPosition);updateProgressBar();音频播放器的设计与实现(4)实现前进/后退按钮监听事件。单击“前进”按钮,表示在当前播放位置的基础上将播放位置前移5秒种,其源代码如下:btnForward.setOnClickListener(new OnClickListener()public void onClick(View v)int currentPosition=mp.getCurrentPosition();/seekForwar
22、dTime=5000,单击前进按钮,表示快进5秒 if(currentPosition+seekForwardTime=mp.getDuration()mp.seekTo(currentPosition+seekForwardTime);else mp.seekTo(mp.getDuration(););单击后退按钮,表示在当前播放位置的基础上将播放位置后移5秒种。源代码与前进按钮类似。音频播放器的设计与实现(5)实现前一首/下一首按钮监听事件。单击下一首按钮,表示将当前正在播放的音乐索引号增加1,然后调用播放方法playSong(),其源代码如下:btnNext.setOnClickList
23、ener(new OnClickListener()public void onClick(View v)/检查有没有下一首歌曲 if(currentSongIndex (songsList.size()-1)playSong(currentSongIndex+1);currentSongIndex=currentSongIndex+1;else /若没有下一首,则播放第一首 playSong(0);currentSongIndex=0;);单击前一首按钮,表示将当前正在播放的音乐索引号减少1,然后调用播放方法playSong()。源代码与下一首按钮类似。音频播放器的设计与实现(6)单击重复/
24、随机播放按钮监听事件。单击重复播放按钮,表示设置为重复播放当前歌曲,即将isRepeat设为true,同时将重复按钮图标改为。其源代码如下:btnRepeat.setOnClickListener(new OnClickListener()public void onClick(View v)if(isRepeat)isRepeat=false;Toast.makeText(getApplicationContext(),关闭重复,Toast.LENGTH_ SHORT).show();btnRepeat.setImageResource(R.drawable.btn_repeat);else
25、 isRepeat=true;Toast.makeText(getApplicationContext(),开启重复,Toast.LENGTH_ SHORT).show();/重复播放开启后,随机播放关闭 isShuffle=false;btnRepeat.setImageResource(R.drawable.repeatfocused);btnShuffle.setImageResource(R.drawable.btn_shuffle););单击随机播放按钮,表示设置为随机播放歌曲,即将isShuffle设为true,同时将随机播放按钮图标改为。源代码与重复播放按钮类似。音频播放器的设计
26、与实现(7)自动播放下一首监听事件。当某首歌曲播放完毕,需要自动播放下一首时,则需要实现MediaPlayer.onCompletion Listener()接口,当然下一首曲目必须依据重复播放按钮和随机播放按钮操作的条件来确定,其源代码如下:public void onCompletion(MediaPlayer arg0)/检查重复状态 if(isRepeat)/若重复状态开启,则下一首仍是刚刚播放的歌曲 playSong(currentSongIndex);else if(isShuffle)/若随机状态开启,则下一首为随机曲目 Random rand=new Random();curr
27、entSongIndex=rand.nextInt(songsList.size()-1)-0+1)+0;playSong(currentSongIndex);else /若重复状态没有开启,则下一首为当前播放曲目的索引号增加1 if(currentSongIndex (songsList.size()-1)playSong(currentSongIndex+1);currentSongIndex=currentSongIndex+1;else playSong(0);currentSongIndex=0;音频播放器的设计与实现 10修改配置文件 由于PlayListActivity.java
28、继承于Activity,属于Android系统的四大组件之一,所以需要在AndroidManifest.xml配置文件中添加如下代码:目录视频播放器的设计与实现视频播放器的设计与实现概述概述音频播放器的设计与实现音频播放器的设计与实现录音机的设计与实现录音机的设计与实现照相机的设计与实现照相机的设计与实现闹钟的设计与实现闹钟的设计与实现定时短信发送器的设计与实现定时短信发送器的设计与实现Android聊天室的设计与实现聊天室的设计与实现在线英汉双译字典的设计与实现在线英汉双译字典的设计与实现天气预报查询系统的设计与实现天气预报查询系统的设计与实现本章小结本章小结项目实训项目实训视频播放器的设计
29、与实现 任务:设计如右图所示的视频播放器MediaPlayVideoView视频播放器的设计与实现 预备知识 在android.widget包中还提供了VideoView(视频视图)组件用于播放视频文件,以简化相对于使用Media Player播放视频的繁琐控制过程。VideoView组件是调用MediaPlayer实现视频播放的,它的作用与ImageView类似,ImageView用来显示图片,VideoView用来播放视频。Android自带的程序Gallery也是用VideoView实现的。这个组件的常用方法见表8-4。VideoView的常用事件见表8-5。视频播放器的设计与实现 视频
30、播放器的实现 1MediaPlayer MediaPlayer类可以用于播放音频和视频,通过设置它的setDataSource()方法可以指定音频或视频的文件路径。而与播放音频数据不同的是,视频播放还要设置显示视频内容的输出界面,此时可以使用SurfaceView控件,将它与MediaPlayer结合起来,就可以实现视频输出了。SurfaceView类的常用方法见表8-6。视频播放器的设计与实现 为了管理SurfaceView,Android提供了一个SurfaceHolder接口;SurfaceView用于显示,SurfaceHolder用于管理显示的SurfaceView对象。Surfac
31、eView是视图(View)的一个继承类,每一个SurfaceView都内嵌封装一个Surface(Surface上Android的一个重要元素,用于Android界面的图形绘制)。通过调用SurfaceHolder可以调用SurfaceView,控制图形的尺寸和大小,而SurfaceHolder对象是由getHold()方法获得的,创建SurfaceHolder对象后,用SurfaceHolder.Callback()方法回调SurfaceHolder,对SurfaceView进行控制。实现步骤如下。(1)创建MediaPlayer对象,并设置加载的视频文件。(2)在界面布局文件中定义Sur
32、faceView控件。(3)通过MediaPlayer.setDisplay(SurfaceHolder sh)来指定视频画面输出到SurfaceView之上。(4)通过MediaPlayer的其他一些方法播放视频。实现代码见备注:视频播放器的设计与实现 VideoView 用VideoView组件实现视频播放时,必须在布局文件中定义两个组件。(1)VideoView组件,用于视频输出。(2)MediaController组件,用于控制视频播放,即用于控制该视频文件的播放行为(如暂停、前进、后退和进度拖曳等)。VideoView类包含的常用方法和事件,上节已详细介绍。MediaControll
33、er类是android.widget包下的,它包含控制MediaPlayer多媒体播放的组件,如“播放”、“暂停”、“快退”、“快进”、“进度条”等。常用方法见表8-7。视频播放器的设计与实现 使用VideoView组件实现视频播放的基本步骤如下。(1)在布局文件上定义VideoView组件。(2)调用VideoView的两个方法(两者选一)来加载指定的视频。setVideoPath(String path),加载path文件代表的视频。setVideoUri(Uri uri),加载uri所对应的视频。(3)调用VideoView的start()、stop()、pause()方法来控制视频的播
34、放。布局文件源代码如下:视频播放器的设计与实现 功能实现源代码如下:public class MainActivity extends Activity private VideoView videoView;private MediaController mediaController;Override public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);videoView=(VideoView)this.findView
35、ById(R.id.videoView);/使用这种方式创建MediaController将不会显示快进和快退两个按钮 /mediaController=new MediaController(this,false);mediaController=new MediaController(this);videoView.setVideoPath(/mnt/sdcard/lesson3.mp4);/设置VideView与MediaController建立关联 videoView.setMediaController(mediaController);/设置MediaController与Vide
36、View建立关联 mediaController.setMediaPlayer(videoView);/让VideoView获取焦点 videoView.requestFocus();/开始播放 videoView.start();目录录音机的设计与实现录音机的设计与实现概述概述视频播放器的设计与实现视频播放器的设计与实现音频播放器的设计与实现音频播放器的设计与实现照相机的设计与实现照相机的设计与实现闹钟的设计与实现闹钟的设计与实现定时短信发送器的设计与实现定时短信发送器的设计与实现Android聊天室的设计与实现聊天室的设计与实现在线英汉双译字典的设计与实现在线英汉双译字典的设计与实现天气预
37、报查询系统的设计与实现天气预报查询系统的设计与实现本章小结本章小结项目实训项目实训录音机的设计与实现 任务:设计如右图所示的简单录音机。录音机的设计与实现 预备知识 为了在Android应用中录制音频,Android系统提供了MediaRecorder类,该类的常用方法见表8-8。录制后的音频文件需要以文件名保存在SD Card的目录下,此时需要使用File类中的createTempFile(String prefix,String suffix,File directory)方法生成文件,其中prefix参数表示文件名前缀,suffix参数表示文件名后缀,directory表示文件存储位置;
38、存储位置需要使用android.os.Environment类中的getExternalStorageDirectory()方法获得SD Card的默认位置,然后根据需要,在此位置下创建存储音频文件的子目录。录音机的设计与实现 录音机的实现 声音的录制比音频或者视频的播放复杂,但一般按照如下步骤实现。(1)使用android.media.MediaRecorder类创建MediaRecorder实例。(2)使用MediaRecorder.setAudioSource()方法设置音频来源。(3)使用MediaRecorder.setOutputFormat()设置输出音频格式。(4)使用Medi
39、aRecorder.setAudioEncorder()设置输出编码格式。(5)使用MediaRecorder.setOutputFile()方法设置输出文件名。(6)在开始录制之前调用MediaRecorder.prepare()方法。(7)调用MediaRecorder.start()方法开始录制声音。(8)调用MediaRecorder.stop()方法停止录制声音。(9)录制完声音调用MediaRecorder.release()方法释放占用的相关资源。另外,在使用麦克风进行录音时,必须给应用程序授予录音的权限,即在AndroidManifest.xml配置文件中增加如下代码:录音机的
40、设计与实现 本案例在界面上通过ListView显示音频文件列表,实现过程在前面UI设计的章节中已详细介绍,此处不再详述;单击“录制”按钮,开始录制声音,实现代码如下:startBTN.setOnClickListener(new OnClickListener()Override public void onClick(View v)try /创建录音文件 audioFile=File.createTempFile(filePrefix,.amr,audioPath);/实例化MediaRecorder对象 mediaRecorder=new MediaRecorder();/设置麦克风 me
41、diaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);/设置输出文件的格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);/设置音频文件的编码 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/设置输出文件的路径 mediaRecorder.setOutputFile(audioFile.getAbsolutePath();mediaRecorder.prepare
42、();mediaRecorder.start();catch(IOException e)e.printStackTrace(););单击“停止”按钮,录制结束,实现代码如下:stopBTN.setOnClickListener(new OnClickListener()Override public void onClick(View v)if(audioFile!=null)mediaRecorder.stop();mediaRecorder.release(););目录照相机的设计与实现照相机的设计与实现概述概述视频播放器的设计与实现视频播放器的设计与实现录音机的设计与实现录音机的设计与
43、实现音频播放器的设计与实现音频播放器的设计与实现闹钟的设计与实现闹钟的设计与实现定时短信发送器的设计与实现定时短信发送器的设计与实现Android聊天室的设计与实现聊天室的设计与实现在线英汉双译字典的设计与实现在线英汉双译字典的设计与实现天气预报查询系统的设计与实现天气预报查询系统的设计与实现本章小结本章小结项目实训项目实训照相机的设计与实现 任务:设计如图所示的简易照相机,单击拍照按钮会将拍照后的图片保存在指定位置。照相机的设计与实现 预备知识 照相机的具体实现有两种方式,一种是调用系统相机实现拍照功能,一种是自定义相机实现拍照功能。在使用系统相机拍照功能时,利用自己编写的Activity调
44、用系统相机的Activity,然后当系统相机的Activity关闭后,返回相片数据给自己编写的Activity,这个过程需要使用如下两个方法。(1)打开新的Activity方法:startActivityForResult(Intent intent,int requestCode);第一个参数为表示码,即调用该方法传递过去的值,第二个参数为结果码,即用于标识返回数据来自哪个新Activity。(2)新的Activity关闭后,新Activity返回的数据通过Intent进行传递,Android平台会调用前面Activity的onActivityResult(int requestCode,i
45、nt resultCode,Intent data)方法,把存放返回数据的Intent作为第三个输入参数传入,然后可以取出新Activity返回的数据。在实现自定义摄像头照相时,需要使用android.hardware.Camera类,该类封装了所有摄像头相关的操作,如连接、断开摄像头服务,设置摄像头的各种参数,开始、结束摄像预览,抓取照片以及连续抓取多个图像帧等。该类没有默认的构造函数,只能使用静态方法open()获得类对象,其他常用方法见表8-9。照相机的设计与实现 照相机的实现 1调用系统相机 通过Intent直接调用系统提供的相机功能,利用它的拍照Activity,就可以很方便地实现照
46、相机功能,要启动这个Activity,就需要使用startActivityForResult()方法,实现代码如下:btnCamera.setOnClickListener(new OnClickListener()Override public void onClick(View v)Intent intent=new Intent(android.media.action.IMAGE_CAPTURE);startActivityForResult(intent,Activity.DEFAULT_KEYS_DIALER););照相机的设计与实现 系统照相机的Activity会返回一个名为da
47、ta的Bitmap对象,它是照片的缩略图。缩略图最后显示在ImageView控件上。从Activity返回图像数据的方法是onActivityResult(),实现代码如下:protected void onActivityResult(int requestCode,int resultCode,Intent data)switch(resultCode)case RESULT_OK:super.onActivityResult(requestCode,resultCode,data);if(data!=null)Bundle extras=data.getExtras();Bitmap b
48、mp=(Bitmap)extras.get(data);ivstorepic.setImageBitmap(bmp);/设置照片缩略图显示在ImageView控件上 hasShootPic=true;/此变量是在提交数据时,验证是否有图片 else hasShootPic=false;break;default:break;照相机的设计与实现 2.自定义相机 为了在应用程序中使用摄像头,必须首先在AndroidManifest.xml文件中设置拍照的权限许可,即在配置文件中增加如下代码:如果系统中没有安装摄像头则这个程序就无法安装,为了通知操作系统当前应用程序使用摄像头,可以在配置文件中加入如
49、下代码:一般拍照和摄像的时候需要写到SD卡上,所以也需要在配置文件中加入如下代码:若开发具有摄像功能的应用程序,还需要音频录制和视频录制功能,所以又需要下面两项权限声明:使用Camera API拍照或摄像,都需要用到预览,预览就要用到SurfaceView,为此Activity的布局中必须有SurfaceView组件。照相机的设计与实现 通过Camera类进行拍照主要包含如下步骤。(1)调用Camera的open()方法打开相机。(2)调用Camera的getParameters()获取拍照的参数,该方法返回一个Camera.parameters对象。(3)调用Camera.Parameter
50、s对象对照相的参数进行设置。(4)调用Camera.setParameters(),并将Camera.Parameters对象作为参数传入,这样就可以对拍照的参数进行控制。(5)调用Camera的startPreview(),开始预览取景,在预览取景之前需要调用Camera的startPreviewDisplay(SufaceHolder holder)设置使用哪个SurfaceView来显示取得的图片。(6)调用Camera的takePicture()进行拍照。(7)结束程序时,调用Camera的stopPreview()结束取景预览,并调用release()释放资源。照相机的设计与实现 自
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。