有趣有内涵的文章第一时间送达!

喝酒I创作I分享

生活中总有些东西值得分享

@醉翁猫咪

1. MediaStore类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。下面那些叙述是正确的()

http://android.xsoftlab.net/reference/android/provider/package-summary.html
http://blog.csdn.net/almo_omla/article/details/51382779
http://blog.csdn.net/lmrjian/article/details/46620613  

您的回答为:

在日常开发中,我们经常会使用MediaStore来获取手机的音频、图片、视频等相关信息。MediaStore类包含四个内部类,分别是:MediaStore.Audio(存放音频信息),MediaStore.Files(存放文件信息,包含非媒体文件,如txt,PDF),MediaStore.Image(存放图片信息),MediaStore.Video(存放视频信息)┋

当手机开机或者有SD卡插拔等事件发生时,系统将会自动扫描SD卡和手机内存上的多媒体文件,如声音、图片、视频等,将相应的信息放入到定义好的数据库中。┋

在程序中,并不需要关心如何去扫描手机系统中的文件,只要通过ContentProvider提供的查询接口,我们便可以得到各种手机上的多媒体信息。┋

获取所有外部存储卡上的音乐文件信息的方法: Cursor cursor = query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);┋

获取歌曲名称的名称的方法:String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));

全选


2. MediaStore提供了很多常量用于多媒体的操作,包括Intent动作以及Intent的附加信息,下面哪个常量描述错误?
http://android.xsoftlab.net/reference/android/provider/MediaStore.html  


您的回答为:EXTRA_SIZE_LIMIT:设置媒体文件最小的大小。   

()EXTRA_DURATION_LIMIT:录制的最长时间,以秒为单位

()EXTRA_OUTPUT:用来定义一个指定的路径,用来保存image或是video。

()ACTION_IMAGE_CAPTURE_SECURE:用于获得面部解锁时调用。

()ACTION_VIDEO_CAPTURE:标准的调用摄像头,来获取视频。

()ACTION_IMAGE_CAPTURE:标准的调用摄像头,来获取抓拍图片。

()EXTRA_SIZE_LIMIT:设置媒体文件最小的大小。

3. MediaStore中audio的字段定义错误的是  


您的回答为:歌曲的名称 :MediaStore.Audio.Media.TITL   

()歌曲的名称:MediaStore.Audio.Media.TITL

()歌曲的专辑名:MediaStore.Audio.Media.ALBUM

()歌曲的歌手名:MediaStore.Audio.Media.ARTIST

()歌曲文件的全路径:MediaStore.Audio.Media.DATA

()歌曲文件的名称:MediaStore.Audio.Media.DISPLAY_NAME

()歌曲文件的发行日期:MediaStore.Audio.Media.YEAR

()歌曲的总播放时长:MediaStore.Audio.Media.DURATION

()歌曲文件的大小:MediaStore.Audio.Media.SIZE


4. Android的MediaPlayer类之地播放不同位置存放的多媒体资源,但不包括以下哪种()  


您的回答为:数据库资源,来自SQLiteDatabase的数据   

()外部URL,以流的方式提供。

()内部URI,如来自ContentProvider

()本地资源,如来自文件系统

()数据库资源,来自SQLiteDatabase的数据

()本地资源,如来自应用程序的RAW资源


5. MediapLayer的setDataSource的重载方法有多个,适用于不同的媒体数据来源,下面哪个是错误的? 


您的回答为:void setDataSource(Activity activity): Sets the data source (activity) to use.   

()void setDataSource(String path):Sets the data source (file-path or http/rtsp URL) to use.

()void setDataSource(Context context, Uri uri, Map<String, String>headers):Sets the data source as a content Uri.

()void setDataSource(MediaDataSource dataSoure):Sets the data source (MediaDataSource) to use.

()void setDataSource(Context context, Uri uri):Sets the data source as a content Uri.

()void setDataSource(FileDescriptor fd, long offset, long length):Sets the data source (FileDescriptor) to use.

()void setDataSource(FileDescriptor fd):Sets the data source (FileDescriptor) to use.

()void setDataSource(Activity activity):Sets the data source (activity) to use.

6. 哪些是使用MediaPlayer播放音视频的正确操作? 

您的回答为:

创建MediaPlaer对象;┋

调用setDataSource()方法来设置音频文件的路径;┋

调用prepare()方法使MediaPlayer进入到准备状态;┋

用start方法就可以播放音频。┋

在使用start()播放流媒体之前,需要装载流媒体资源。这里最好使用prepareAsync()用异步的方式装载流媒体资源。因为流媒体资源的装载是会消耗系统资源的,在一些硬件不理想的设备上,如果使用prepare()同步的方式装载资源,可能会造成UI界面的卡顿,这是非常影响用于体验的。因为推荐使用异步装载的方式,为了避免还没有装载完成就调用start()而报错的问题,需要绑定MediaPlayer.setOnPreparedListener()事件,它将在异步装载完成之后回调。异步装载还有一个好处就是避免装载超时引发ANR((Application Not Responding)错误。┋

对于单曲循环之类的操作,除了可以使用setLooping()方法进行设置之外,还可以为MediaPlayer注册回调函数,MediaPlayer.setOnCompletionListener(),它会在MediaPlayer播放完毕被回调。┋

因为MediaPlayer一直操作的是一个流媒体,所以无可避免的可能一段流媒体资源,前半段可以正常播放,而中间一段因为解析或者源文件错误等问题,造成中间一段无法播放问题,需要我们处理这个错误,否则会影响Ux(用户体验)。可以为MediaPlayer注册回调函数setOnErrorListener()来设置出错之后的解决办法,一般重新播放或者播放下一个流媒体即可。

全选

7. 以下关于MediaPlayer常用方法的描述错误的是  


您的回答为:setLooping 设置是否自动播放下一首

()create 创建一个要播放的多媒体

()getCurrentPosition 得到当前播放位置

()getDuration 得到文件的时间

()getVideoHeight 得到视频的高度

()getVideoWidth 得到视频的宽度

()isLooping 是否循环播放

()isPlaying 是否正在播放

()pause 暂停

()prepare 准备(同步)

()prepareAsync 准备(异步)

()release 释放MediaPlayer对象相关的资源

()reset 重置MediaPlayer对象为刚刚创建的状态

()seekTo 指定播放的位置(以毫秒为单位的时间)

()setAudioStreamType 设置流媒体的类型

()setDataSource 设置多媒体数据来源(位置)

()setDisplay 设置用SurfaceHolder来显示多媒体

()setLooping 设置是否自动播放下一首

()setOnButteringUpdateListener 网络流媒体的缓冲监听

()setOnErrorListener 设置错误信息监听

()setOnVideoSizeChangedListener 视频尺寸监听

()setVolume 设置音量

()start 开始播放

()stop 停止播放


8. MediaPlayer是一个具备有很多运行状态的复杂类,具备了多种监听器,下面那种不是MediaPlayer的监听器。 


您的回答为:MediaPlayer.OnClickListener: 点击接口。该接口中定义了一个回调方法,当点击事件发生时回调该方法。

()MediaPlayer.OnBufferingUpdateListener:数据缓冲接口。定义一个回调接口,该接口的作用是在流媒体缓冲状态发生改变的时候,标明该状态。

()MediaPlayer.OnCompletionListener:播放完毕接口。在接口中定义了流媒体播放完毕后回调的方法。

()MediaPlayer.OnErrorListener:错误接口。在该接口中定义回调方法,在异步操作中出现错误时会回调该方法,其它情况下出现错误时直接抛出异常。

()MediaPlayer.OnInfoListener:信息接口。该接口定义了一个回调方法,该方法在媒体播放时出现信息或者警告时回调该方法。

()MediaPlayer.OnPreparedListener:准备播放接口。该接口中定义一个回调方法,该方法在进入Prepared状态并开始播放的时候回调。

()MediaPlayer.OnSeekCompleteListener:搜索接口。该接口定义了一个回调方法,该方法在查找操作完成后回调。

()MediaPlayer.OnVideSizeChangedListener:视频大小变化接口。该接口中定义了一个回调方法,当视频大小首次被知晓或者更新的时候回调该方法。

()MediaPlayer.OnTimeTextListener:外挂字幕接口。该接口中定义了一个回调方法,当字幕的需要显示时回调该方法。

()MediaPlayer.OnClickListener:点击接口。该接口中定义了一个回调方法,当点击事件发生时回调该方法。


9. 下面关于MediaPlayer类生命周期叙述错误的是()
http://blog.csdn.net/biaobiao1217/article/details/51557733


您的回答为:


Preparing 状态:初始化完成之后还需要通过调用prepare()或prepareAsync()方法,这两个方法一个是同步的一个是异步的,只有进入Prepared状态,才表明MediaPlayer到目前为止都没有错误,可以进行文件播放。┋


Prepared 状态:这个状态比较好理解,主要是和prepareAsync()配合,如果异步准备完成,会触发OnPreparedListener.onPrepared(),进而进入Prepared状态。   

()Idle 状态:当使用new()方法创建一个MediaPlayer对象或者调用了其reset()方法时,该MediaPlayer对象处于idle状态。这两种方法的一个重要差别就是:如果在这个状态下调用了getDuration()等方法(相当于调用时机不正确),通过reset()方法进入idle状态的话会触发OnErrorListener.onError(),并且MediaPlayer会进入Error状态;如果是新创建的MediaPlayer对象,则并不会触发onError(),也不会进入Error状态。

()End状态:通过release()方法可以进入End状态,只要MediaPlayer对象不再被使用,就应当尽快将其通过release()方法释放掉,以释放相关的软硬件组件资源,这其中有些资源是只有一份的(相当于临界资源)。如果MediaPlayer对象进入了End状态,则不会进入任何其他状态了。

()Initialized 状态:这个状态比较简单,MediaPlayer调用setDataSource()方法就进入Initialized 状态,表示此时要播放的文件已经设置好了。

()Preparing 状态:初始化完成之后还需要通过调用 prepare() 或 prepareAsync() 方法,这两个方法一个是同步的,一个是异步的,只有进入Prepared状态,才表明MediaPlayer到目前为止都没有错误,可以进行文件播放。

()Prepared 状态:这个状态比较好理解,主要是和prepareAsync()配合,如果异步准备完成,会触发0nPreparedListener.onPrepard(),进而进入Prepared 状态。

()Started 状态:显然,MediaPlayer一旦准备好,就可以调用start()方法,这样MediaPlayer就处于Started状态,这表明MediaPlayer正在播放文件过程中。可以使用isPlaying()测试MediaPlayer是否处于了Started状态。如果播放完毕,而又设置了循环播放,则MediaPlayer仍然会处于Started状态,类似的,如果在该状态下MediaPlayer调用了seekTo()或者start()方法均可以让MediaPlayer停留在Stared状态。

()Paused 状态:Started状态下MediaPlayer调用pause()方法可以暂停MediaPlayer,从而进入Paused状态,MediaPlayer暂停后再次调用start()则可以继续MediaPlayer的播放,转到Started状态,暂停状态时可以调用seekTo()方法,这是不会改变状态的。

()Stop 状态:Started或者Paused状态下均可调用stop()停止MediaPlayer,而处于Stop状态的MediaPlayer要想重新播放,需要通过prepardAsync()和prepare()回到先前的Prepared状态重新开始才可以。

()PlaybackCompleted 状态:文件正常播放完毕,而又没有设置循环播放的话就进入该状态,并会触发OnCompletionListener的onCompletion()方法。此时可以调用start()方法重新从头播放文件,也可以stop()停止MediaPlayer,或者也可以seekTo()来重新定位播放位置。

()Error 状态:如果由于某种原因MediaPlayer出现了错误,会触发OnErrorListener.onError()事件,此时MediaPlayer即进入Error状态,及时捕捉并妥善处理这些错误时很重要的,可以帮助我们及时释放相关的软硬件资源,也可以改善用户体验。通过setOnErrorListener(android.media.MediaPlayer.OnErrorListener)可以设置该监听器。如果MediaPlayer进入Error状态,可以通过调用reset()来恢复,使得MediaPlayer重新返回到Idle状态。

10. MediaPlayer is a complex class with many running states, with a variety of listeners, which one is not about MediaPlayer.
http://android.xsoftlab.net/reference/android/media/MediaPlayer.html

您的回答为:void setOnClickListener(View.OnClickListener l): Register a callback to be invoked when this view is clicked.  

()Void setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenter listener):Register a callback to be invoked when the status of a network stream's buffer has changed.

()void setOnCompletionListener(MediaPlayer.OnCompletionListener listener):Register a callback to be invoked when the end of a media source has been reached during playback.

()void setOnErrorListener(MediaPlayer.OnErrorListener listener):Register a callback to be invoked when an error has happened during an asynchronous operation.

()void setOnInfoListenere(MediaPlayer.OnInfoListener listener):Register a callback to be invoked when an info/warning is available.

()void setOnPreparedListener(MediaPlayer.OnPreparedListener listener):Register a callback to be invoked when the media source is ready for playback.

()void setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener):Register a callback to be invoked when a seek operation has been completed.

()void setOnTimedTextListener(MediaPlayer.OnTimedTextListener listener):Register a callback to be invoked when a timed text is available for diaplay.

()void setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener):Register a callback to be invoked when the video size is known or updated.

()void setOnClickListener(View.OnClickListener l):Register a callback to be invoked when this view is clicked.

后续

关注我,每天都有优质技术文章推送。工作,学习累了的时候放松一下自己。
欢迎大家关注我的微信公众号:「醉翁猫咪」

2016级移动应用开发在线测试14-MediaPlayer相关推荐

  1. 2016级移动应用开发在线测试13-Location、Sensor Network

    有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪  1. 充分利用智能手机的GPS定位信息,创造了O2O的商业模式,打通了线上与线下的信息流和商流,极大地推动了移 ...

  2. 2016大学计算机陈春丽,2016级计算机类专业分流结果公示.PDF

    2016级计算机类专业分流结果公示.PDF 2016级计算机类专业分流结果公示 序号 姓名 性别 学号 原专业 原班级 分入专业 分入班级 1 胡天韵 女 计算机类 计算机科学与技术 2 陈超强 男 ...

  3. 数据结构课程主页-2016级

    新学期,再度起程! 翻转的数据结构课程再度迎来新的一批同学. 前两年,资源建设基本完备,课堂方案逐渐完善,同学们对新型的学习方式设计给予了肯定(参见2014级问卷调查和2015级学生总结). 针对20 ...

  4. 程序设计基础(C语言)课程主页-2016级

    时间很快,2016级的小鲜肉们已经在猜测老贺长什么样子了. 从在线作业到翻转课堂,几届的学生跟着我受了不少苦.话虽这么说,并不代表2016级的就要轻松了(老贺虚伪到底!).不过,苦孩子们,享受吧. 话 ...

  5. 2016级计专班编程课程主页

    新学期,我们一起起程!  针对2016级的程序设计教学,重点之一是完善课堂方案,让课堂成为再次掌握编程语言的催化剂,以课堂活动为核心,让学习更有效.这重中之重,便是小组合作,学习小组不仅在课堂起作用, ...

  6. 奥克兰大学计算机科学与技术,奥克兰大学与2016级计算机科学技术专业(中外合作办学)学生见面会顺利进行...

    2018年12月3日中午一点半,奥克兰大学与2016级计算机科学与技术专业(中外合作办学)学生见面会在第二十五教学楼一楼报告厅举行.参会的嘉宾有奥克兰大学副校长珍妮▪狄克逊,学院党委副书记曾艳,副院长 ...

  7. 计算机学院李世杰,有关办理2016级转专业学生相关手续通知

    <有关办理2016级转专业学生相关手续通知>由会员分享,可在线阅读,更多相关<有关办理2016级转专业学生相关手续通知(4页珍藏版)>请在技术文库上搜索. 1.1 关于办理 2 ...

  8. 计算机工程学院迎新晚会,计算机与信息工程学院2016级迎新晚会举行

    又是一年开学季.9月24日晚,计算机与信息工程学院2016级新生迎新晚会在计算机大楼二楼报告厅拉开帷幕.这是送给2016届新生"小石榴"们的第一份贵重礼物,同时对小石榴们正式加入计 ...

  9. 赵娜计算机,新学期 新起点 新征程——计算机学院2016级召开系列年级工作会议...

    为提高学生学习积极性,帮助学生恰当处理学习.活动和工作的关系,3月21-28日,计算机学院2016级召开"新学期.新起点.新征程"系列工作会议.会议由2016级辅导员赵娜主持. 本 ...

最新文章

  1. 2021全球产品经理大会蓄势待发!
  2. Spring boot日志使用
  3. mysql explain理解
  4. 服务器用户编码是什么,涨知识:英特尔服务器CPU编号是啥意思?
  5. 别眨眼!AI 通过自学秒解魔方,比人类纪录快两倍
  6. 你们觉得很可笑,但是很多人信的,真的很多很多。。
  7. Java开发必会Git分布式版本控制系统实战篇
  8. NuGet:添加EntityFramework
  9. Effective Objective-C 2.0 Tips 总结 Chapter 3 Chapter 4
  10. 牛客 赛码网 编程题JavaScript的输入输出
  11. meson ninja 简介
  12. 怎么用ping命令测试网速
  13. vue第四天笔记02——axios请求
  14. 【LeetCode】517. 超级洗衣机 解题报告 (python)
  15. U盘文件乱码?修复后U盘文件消失,但仍占有U盘空间?
  16. 深信服信锐 技术支持(网络工程师)
  17. 云计算赛项-私有云skywalking服务部署与应用
  18. 新手小白如何用linux云服务器搭建wordpress个人网站
  19. mysql入库出库触发器_入库出库后库存自动更新的SQL触发器语句是什么?
  20. 五大最受欢迎的BUG管理系统 .

热门文章

  1. ArduPilot飞行前检查——PreArm解析
  2. linux中600是什么权限,linux系统中文件的权限
  3. 微信公众号与微信小程序相辅相成
  4. 当外面的容器的height使用百分比时,如何设置line-height可以使里面的文字垂直居中
  5. 两个必须更新浏览器的理由,危险就在你身边
  6. 《七哥说道》第十六章:程序员,江湖见
  7. maven项目配置阿里云镜像下载jar包
  8. DC-DC与LDO的区别
  9. word文档可以打开但显示乱码的完全解决攻略
  10. 对多个Word文件批量添加页码,自由分页。Word精灵V5.0