欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Android应用开发揭秘——实验六.doc

    • 资源ID:33454712       资源大小:133.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Android应用开发揭秘——实验六.doc

    如有侵权,请联系网站删除,仅供学习与交流Android应用开发揭秘实验六【精品文档】第 17 页实验六姓名:马征 学号:2011303502 班级:14011107一、 了解Android多媒体开发1、 Open CoreOpen Core是Android多媒体框架的核心所有Android平台的音频、视频的采集以及播放等操作都是通过它来实现。它也被称为PV Packet VideoPacket Video是一家专门提供多媒体解决方案的公司。程序员可以通过Open Core方便快速地开发出想要的多媒体应用程序例如录音、播放、回放、视频会议、流媒体播放等等。可以看出Open Core支持的格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。Open Core多媒体框架有一套通用可扩展的接口针对第三方的多媒体编码器输入、输出设备等等。具体功能如下多媒体文件的播放、下载包括3GPPMPEG-AAC和MP3 containers。 流媒体文件的下载、实时播放包括3GPPHTTP和RTSP/RTP。动态视频和静态图像的编码、解码例如MPEG-4H.263和AVC(H.264)JPEG。 语音编码格式AMR-NB和AMR-WB。 音乐编码格式MP3AACAAC+。 视频和图像格式3GPPMPEG-4和JPEG。 视频会议基于H324-M标准Open Core是一个多媒体的框架从宏观上来看它主要包含了两大方面的内容 PVPlayer提供多媒体播放器的功能完成各种音频Audio、视频Video流的回放Playback功能。 PVAuthor提供媒体流记录的功能完成各种音频、视频流以及静态图像的捕获功能。Open Core的代码在Android代码的External/Opencore目录中其子目录及其具体功能描述如下Android这里面是一个上层的库它实现了一个为Android使用的音视频采集、播放的接口及DRM数字版权管理的接口实现。Baselibs包含数据结构和线程安全等内容的底层库。Codecs_v2音视频的解码器基于OpenMAX的头文件。 Fileformats文件格式的解析Parser工具。Nodes提供一些PVMF的NODE主要是编解码和文件解析方面的。 Oscl操作系统兼容库。Pvmi输入输出控制的抽象接口。 Protocols主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容。 Pvcommon :pvcommon库文件的Android.mk文件没有源文件。Pvplayerpv :player库文件的Android.mk文件没有源文件。Pvanthor :pvauthor库文件的Android.mk文件没有源文件。 Tools_v2编译工具以及一些可注册的模块。在实际的开发中,我们不会过多研究Open core的实现,Android提供了上层的Media API给开发人员使用:Android中对媒体系统相关的Java代码,主要有下表中的文件:2、 MediaPlayerMediaPlayer类可以用来播放音频、视频和流媒体MediaPlayer包含了Audio和Video的播放功能在Android的界面上Music和Video两个应用程序都是调用MediaPlayer实现的。首先我们来看看MediaPlayer的生命周期当一个MediaPlayer对象被新建或者调用reset()方法之后它处于空闲状态在调用release()方法后才会处于结束状态。 一个新建的MediaPlayer对象在调用getCurrentPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setAudioStreamType(int)、setLooping(boolean)、setVolume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()、prepareAsync()方法时不会触发OnErrorListener.onError()事件。当MediaPlayer对象不再被使用时最好通过release()方法来释放使其处于结束状态以免造成不必要的错误。当MediaPlayer对象处于结束状态时便不能再使用。 MediaPlayer对象被新建时处于空闲状态如果通过create()方法创建之后便处于准备状态 一般情况下一些常用的播放控制操作可能因为音频、视频的格式不被支持或者质量较差以及流超时也有可能由于开发者的疏忽使得MediaPlayer对 象 处 于 无 效 状 态 等 而 导 致 错 误 。这 里 可 以 通 过 注 册setOnErrorListener(android.media.MediaPlayer.OnErrorListener)方法实现OnErrorListener.onError()方法来监控这些错误。如果发生了错误MediaPlayer对象将处于错误状态可以使用reset()方法来恢复错误。 任何MediaPlayer对象都必须先处于准备状态然后才开始播放。要开始播放MediaPlayer对象都必须成功调用start()方法。可以通过isPlayer()方法来检测当前是否正在播放。当MediaPlayer对象在播放时可以进行暂停和停止等操作pause()方法暂停播放stop()方法停止播放。处于暂停状态时可以通过start()方法来恢复播放但是处于停止状态时则必须先调用pause()方法处于准备状态然后再通过start()方法来开始播放。可以通过setLooping(Boolean)方法来设置是否循环播放。3、 MediaRecorderMediaRecorder类用来进行媒体采样包括音频和视频。MediaRecorder作为状态机运行。需要设置不同的参数比如源设备和格式。设置后可执行任何时间长度的录制直到用户停止MediaRecorder在底层同样是通过Open Core来实现的,但是要开发应用时需要使用Android为我们提供的Java借口:二、 Android多媒体的具体示例1、 播放音乐首先我们的播放器可能不只是希望播放一种格式的音乐,而且还需要自动识别指定路径中那些事可以播放的音频文件,那些事不支持的格式:class MusicFilter implements FilenameFilterpublic Boolean accept(File dir,String name) /这里还可以设置其他格式的音乐文件 return (name.endsWith(.mp3); 现在我们需要需要指定音乐文件的位置本例我们设置路径为“/sdcard/”因此我们需要向SD卡中添加一些音频文件。步骤如下启动模拟器在Eclipse上选择DDMS窗口选择File Explorer标签。public class Activity01 extends ListActivity /* 几个操作按钮 */private ImageButtonmFrontImageButton= null;private ImageButtonmStopImageButton= null;private ImageButtonmStartImageButton= null;private ImageButtonmPauseImageButton= null;private ImageButtonmNextImageButton= null;/* MediaPlayer对象 */public MediaPlayermMediaPlayer= null;/* 播放列表 */private List<String> mMusicList = new ArrayList<String>();/* 当前播放歌曲的索引 */private int currentListItme = 0;/* 音乐的路径 */private static final String MUSIC_PATH = new String("/sdcard/");/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 更新显示播放列表 */musicList();/* 构建MediaPlayer对象 */mMediaPlayer= new MediaPlayer();mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton); mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton);mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton); mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton);mNextImageButton = (ImageButton) findViewById(R.id.NextImageButton); /停止按钮mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v)/* 是否正在播放 */if (mMediaPlayer.isPlaying()/重置MediaPlayer到初始状态mMediaPlayer.reset();/开始按钮mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v)playMusic(MUSIC_PATH + mMusicList.get(currentListItme);/暂停mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() public void onClick(View view)if (mMediaPlayer.isPlaying()/* 暂停 */mMediaPlayer.pause();else /* 开始播放 */mMediaPlayer.start();/下一首mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View arg0)nextMusic();/上一首mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View arg0)FrontMusic();public boolean onKeyDown(int keyCode, KeyEvent event)if ( keyCode = KeyEvent.KEYCODE_BACK)mMediaPlayer.stop();mMediaPlayer.release();this.finish();return true;return super.onKeyDown(keyCode, event);Override/* 当我们点击列表时,播放被点击的音乐 */protected void onListItemClick(ListView l, View v, int position, long id)currentListItme = position;playMusic(MUSIC_PATH + mMusicList.get(position);/* 播放列表 */public void musicList()/取得指定位置的文件设置显示到播放列表File home = new File(MUSIC_PATH);if (home.listFiles(new MusicFilter().length > 0)for (File file : home.listFiles(new MusicFilter()mMusicList.add(file.getName();ArrayAdapter<String> musicList = new ArrayAdapter<String>(Activity01.this,R.layout.musicitme, mMusicList);setListAdapter(musicList);private void playMusic(String path)try/* 重置MediaPlayer */mMediaPlayer.reset();/* 设置要播放的文件的路径 */mMediaPlayer.setDataSource(path);/* 准备播放 */mMediaPlayer.prepare();/* 开始播放 */mMediaPlayer.start();mMediaPlayer.setOnCompletionListener(new OnCompletionListener() public void onCompletion(MediaPlayer arg0)/播放完成一首之后进行下一首nextMusic();catch (IOException e)/* 下一首 */private void nextMusic()if (+currentListItme >= mMusicList.size()currentListItme = 0;elseplayMusic(MUSIC_PATH + mMusicList.get(currentListItme);/* 上一首 */private void FrontMusic()if (-currentListItme >= 0)currentListItme = mMusicList.size();elseplayMusic(MUSIC_PATH + mMusicList.get(currentListItme);/* 过滤文件类型 */class MusicFilter implements FilenameFilterpublic boolean accept(File dir, String name)/这里还可以设置其他格式的音乐文件return (name.endsWith(".mp3");扩展学习现在我们已经知道如何来播放指定SD卡上的音乐了, 我们在应用时(比如游戏中的音效),肯定是需要和我们的程序一起打包发布的,这样音乐就没有存在于SD卡上了,一般情况下会放在应用目录下的“resraw”中。那么如何来播放这样的音乐呢,其实很简单,只需要把上面例子中的setDataSource方法改成由create方法来创建一个指定资料索引的MediaPlayer对象,其他操作基本一样。2、 播放视频目前整个平台仅支持MP4的H.264、3GP和 WMV视频的解析。首先在布局文件中创建Video View 布局并且创建几个按钮Button来实现对视频的操作<?xml version="1.0" encoding="utf-8"?><AbsoluteLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="string/hello" <VideoView android:id="+id/VideoView01" android:layout_width="320px" android:layout_height="240px" <Button android:id="+id/LoadButton" android:layout_width="80px" android:layout_height="wrap_content" android:text="装载" android:layout_x="30px" android:layout_y="300px" <Button android:id="+id/PlayButton" android:layout_width="80px" android:layout_height="wrap_content" android:text="播放" android:layout_x="120px" android:layout_y="300px" <Button android:id="+id/PauseButton" android:layout_width="80px" android:layout_height="wrap_content" android:text="暂停" android:layout_x="210px" android:layout_y="300px"</AbsoluteLayout>当我们点击“装载”按钮时将指定视频文件的路径如 /*设置路径*/ Video View.setvideoPath(/sdcard/test.mp4); /*设置模式-播放进度条*/Video view.setmediacomtroller(new mediacontroller(Activiy01.this); Videoview.requestfocus(); 装载之后便可以通start、pause方法来播放和暂停public class Activity01 extends Activity/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 创建VideoView对象 */final VideoView videoView = (VideoView) findViewById(R.id.VideoView01);/* 操作播放的三个按钮 */Button PauseButton = (Button) this.findViewById(R.id.PauseButton);Button LoadButton = (Button) this.findViewById(R.id.LoadButton);Button PlayButton = (Button) this.findViewById(R.id.PlayButton);/* 装载按钮事件 */LoadButton.setOnClickListener(new OnClickListener() public void onClick(View arg0)/* 设置路径 */videoView.setVideoPath("/sdcard/test.mp4");/* 设置模式-播放进度条 */videoView.setMediaController(new MediaController(Activity01.this);videoView.requestFocus();/* 播放按钮事件 */PlayButton.setOnClickListener(new OnClickListener() public void onClick(View arg0)/* 开始播放 */videoView.start();/* 暂停按钮 */PauseButton.setOnClickListener(new OnClickListener() public void onClick(View arg0)/* 暂停 */videoView.pause();3、 录制歌曲现在几乎每个手机都有录音功能其用途也很广比如我们需要记录某些重要的内容时手头又没有笔之类的工具这时我们就可以通过录音功能来将通话内容录制下来。而且 我们通常可以将自己的录音设置为个性铃声等。本要内容我们将学习在ANDROID如何进行录音当点击“开始“按钮后就构建MEDIARECORDER对象并且设置声音的来源SETAUDIOSOURCE、输出文件的格式SETOUTPUTFORMAT、音频文件的编码9SETAUDIOENCODER、输出文件的路径SETOITPUTFILE等然后准备开始录音PREPATE开始录音START。当点击“停止”按钮时停止录音STOP然后释放MEDIARECORDER对象RELEASE0完成录音。public class Activity01 extends ListActivity/* 按钮 */private ButtonStartButton;private ButtonStopButton;/* 录制的音频文件 */private FilemRecAudioFile;private FilemRecAudioPath;/* MediaRecorder对象 */private MediaRecordermMediaRecorder;/* 录音文件列表 */private List<String>mMusicList= new ArrayList<String>();/* 零时文件的前缀 */private StringstrTempFile= "recaudio_"/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 取得按钮 */StartButton = (Button) findViewById(R.id.StartButton);StopButton = (Button) findViewById(R.id.StopButton);/* 检测是否存在SD卡 */if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)/* 得到SD卡得路径 */mRecAudioPath = Environment.getExternalStorageDirectory();/* 更新所有录音文件到List中 */musicList();elseToast.makeText(Activity01.this, "没有SD卡", Toast.LENGTH_LONG).show();/* 开始按钮事件监听 */StartButton.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View arg0)try/* 创建录音文件 */mRecAudioFile = File.createTempFile(strTempFile, ".amr", mRecAudioPath);/* 实例化MediaRecorder对象 */mMediaRecorder = new MediaRecorder();/* 设置麦克风 */mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);/* 设置输出文件的格式 */mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);/* 设置音频文件的编码 */mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);/* 设置输出文件的路径 */mMediaRecorder.setOutputFile(mRecAudioFile.getAbsolutePath();/* 准备 */mMediaRecorder.prepare();/* 开始 */mMediaRecorder.start();catch (IOException e)e.printStackTrace();/* 停止按钮事件监听 */StopButton.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View arg0)/ TODO Auto-generated method stubif (mRecAudioFile != null)/* 停止录音 */mMediaRecorder.stop();/* 将录音文件添加到List中 */mMusicList.add(mRecAudioFile.getName();ArrayAdapter<String> musicList = new ArrayAdapter<String>(Activity01.this, R.layout.list, mMusicList);setListAdapter(musicList);/* 释放MediaRecorder */mMediaRecorder.release();mMediaRecorder = null;/* 播放录音文件 */private void playMusic(File file)Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);/* 设置文件类型 */intent.setDataAndType(Uri.fromFile(file), "audio");startActivity(intent);Override/* 当我们点击列表时,播放被点击的音乐 */protected void onListItemClick(ListView l, View v, int position, long id)/* 得到被点击的文件 */File playfile = new File(mRecAudioPath.getAbsolutePath() + File.separator + mMusicList.get(position);/* 播放 */playMusic(playfile);/* 播放列表 */public void musicList()/ 取得指定位置的文件设置显示到播放列表File home = mRecAudioPath;if (home.listFiles(new MusicFilter().length > 0)for (File file : home.listFiles(new MusicFilter()mMusicList.add(file.getName();ArrayAdapter<String> musicList = new ArrayAdapter<String>(Activity01.this, R.layout.list, mMusicList);setListAdapter(musicList);/* 过滤文件类型 */class MusicFilter implements FilenameFilterpublic boolean accept(File dir, String name)return (name.endsWith(".amr");代码清单7-5中通过“ENVIRONMENT。GETEXTERNALSTORAGEDIRECTORY”可以取得SD卡路径。最后将录音保存到了SD卡图7-10是录音后保存在SD卡中的AMR文件。通过这个例子的学习我们可以得出要实现录音的一般步骤 实例化MEDIARECORDERMR=NEW MEDIARECORDER 初始化mr:mr.setAudiosource(MIC)setVideo-source(CAMERA),必须在配置DATASOURCE之前调用 配置DATASOURCE设置输出文件格式/路径编码器等 准备录制mr.prepare(); 开始录制mr.start(); 停止录制mr.stop(); 释放资源mr.release()。4、 相机设置在ANDROID中专门提供了CAMERA来处理相机相关的事件CAMERA是一个专门用来连接和断开相机服务的类CAMERA下面包括如下几个事件 Camera.autofocuscallback:自动调焦功能 Camera.errorcallback:错误信息捕捉 Camera.parameters相机的属性参数 Camera.previewcallback:相机预览设置 Camera.picturecallback:拍照、产生图片时触发 Camera.shuttercallback:快门设置 Camera.size:图片的尺寸。 要在ANDROID中使用相机服务很简单CAMERA没有构造方法我们要使用它直接通过OPEN方法来打开相机设备然后通过CAMERA.PARAMETERS对相机的一些属性进行设置比如输出图片的格式、大小等等。public class Activity01 extends Activityprivate PreviewmPreview;/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);/ Create our Preview view and set it as the content of our activity.mPreview = new Preview(this);setContentView(mPreview);public boolean onKeyUp(int keyCode, KeyEvent event)

    注意事项

    本文(Android应用开发揭秘——实验六.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开