2016级移动应用开发在线测试14-MediaPlayer
有趣有内涵的文章第一时间送达!
喝酒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的更多相关文章
- 2016级移动应用开发在线测试13-Location、Sensor & Network
有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 1. 充分利用智能手机的GPS定位信息,创造了O2O的商业模式,打通了线上与线下的信息流和商流,极大地推动了移 ...
- 2016级移动应用开发在线测试12-service
有趣有内涵的文章第一时间送达! 喝酒I创作I分享 生活中总有些东西值得分享 @醉翁猫咪 1. Service是Android系统中的四大组件之一(Acitivty.Service.ContentPr ...
- 闽江学院软件学院2016级JAVA构建之法-学生自学兴趣小组招募通知
为提升我2016级学生提升JAVA软件开发学习氛围,鼓励更多同学通过自学.团队学习.在线(社区)学习等方式学习并掌握JAVA课程,尤其是鼓励同学们通过微软中国邹欣老师所倡导的"构建之法&qu ...
- 【转载】在 2016 年做 PHP 开发是一种什么样的体验?(一)
转自:https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听说 ...
- Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据
原文 Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据 第14部分:在运行时绑定到真实的数据 原文地址: http://channel9.msdn.com/Series/ ...
- Windows Phone开发(14):数据模板
原文:Windows Phone开发(14):数据模板 数据模板,如果你仅仅听到这个名词,你一定很迷惑,什么来的?用来干什么的?不急,亲,今天,我们一起来探索一下吧. 用白话文说,数据模板就是用来规范 ...
- 【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
原文: https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听 ...
- Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用
ylbtech-Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用 1.返回顶部 1. Java 实例 - Varargs 可变参数使用 Java ...
- Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素
ylbtech-Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素 1.返回顶部 1. Java 实例 - 在数组中查找指定元素 Java 实例 以下实例 ...
随机推荐
- EFCore自动迁移
2019/05/14,EFCore 2.2.4 有两种方式: 使用Migrate()方法 if (DbContext.Database.GetPendingMigrations().Any()) { ...
- C# vb .net实现透明特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的透明效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- Go defer 会有性能损耗,尽量不要用?
上个月在 @polaris @轩脉刃 的全栈技术群里看到一个小伙伴问 “说 defer 在栈退出时执行,会有性能损耗,尽量不要用,这个怎么解?”. 恰好前段时间写了一篇 <深入理解 Go def ...
- 《明日方舟》Python版公开招募工具
工具介绍 根据输入的标签,快速找出能够招募4星,5星干员的标签组合,比如刷出了 重装 | 男 | 支援 |术师 | 先锋 五个标签,输入效果如下: 注意:不支持高级干员和资深高级干员标签 使用环境 安 ...
- [转]Sublime Text 3安装Json格式化插件
1.安装Package control 首先需要安装Package control,如果已经安装请跳过此步骤.按Ctrl+Shift+p打开命令搜索框,输入PC,点击图中条目安装,如下图: 成功后 ...
- Hadoop问题解决:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在配置好hadoop的环境之后,命令启动./start-all.sh发现经常出现这样的一个警告: WARN util.NativeCodeLoader: Unable to load native-h ...
- SpringBoot中yml配置文件
1.yml配置文件书写格式 格式是在普通配置文件中以“.”分割的属性名称,该为“: ”和换行. 例子: //普通格式 spring.datasource.driver-class-name=com.m ...
- 图片Image转换为base64编码的方法
1.FileReader 通过XMLHttpRequest请求图片Blob数据格式,然后利用FileReader转换为dataURL function toDataURL(url, callback) ...
- js动态替换和插入字符串
替换 str是我要查询的内容loot.SERVE.file 是要被替换的内容g 全局替换"" 去替换的内容,我这里是空str.replace(new RegExp(loot.SER ...
- 多代理切换 MultiProxy
配置代理选项 添加代理列表 ie配置代理 开始使用