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 实例 以下实例 ...
随机推荐
- 2.NET Core设定数据库种子
1.使用以下代码在 Models 文件夹中创建一个名为 SeedData 的新类: using Microsoft.EntityFrameworkCore;using Microsoft.Extens ...
- js正则表达式(七)
一.正则表达式对象的创建方法一:使用构造函数的形式: var pattern = new RegExp('正则表达式','修饰符'); var pattern = new RegExp('hello' ...
- 一张图带你看懂原始dao与SQL动态代理开发的区别-Mybatis
//转载请注明出处:https://www.cnblogs.com/nreg/p/11156167.html 1.项目结构区别: 2.开发区别: 注:其中原始dao开发的实现类UserDaoImpl ...
- jQuery-使页面回到顶部
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux下svn解决冲突
1. 使用svn status + 文件路径+文件名 查看文件或目录的状态(该状态可自行进行百度),属性状态为'C'的表示,改文件或目录处于冲突状态 2. 使用svn resolve --accept ...
- SQL Text Literals 文本
Text Literals 文本 Use the text literal notation to specify values whenever string appears in the synt ...
- 02-CSS常用样式
本篇主要介绍css的常用样式,以及网页布局相关知识.绝对定位和相对定位,盒子模型.css权重.以及css选择器: 绪论:CSS基本介绍 为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开, ...
- django的缓存实例应用
那么多的可配置方法,我们用那个呢. 首先在setting中配置你想要的缓存,我这里就用文件的方式是配置.如图: 第二步: 第三步: 第四步: 实现结果: 总结: 都是指明当前资源的有效期,控制浏览器 ...
- CentOS7源码安装Redis5.0.4非关系型数据库
源码安装redis-5.0.4 一. 下载redis 1. 需要连接网络 二. 案例(另一种安装方法) [root@localhost ~]# wget http://download.redis.i ...
- MySQL/MariaDB数据库的性能测试
MySQL/MariaDB数据库的性能测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据库服务衡量指标 qps: query per second(每秒支持多少查询 ...