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 实例 以下实例 ...
随机推荐
- mysql存储过程简单例子
1.之前经常在oracle数据库中使用存储过程,换到mysql后用的不多,但是有时候也用,大致记录一下,基本和oracle的一样. CREATE DEFINER = `root`@`%` PROCED ...
- 如何让 height:100%; 起作用---父级元素必须设定高度
参考: http://www.webhek.com/post/css-100-percent-height.html https://www.cnblogs.com/kunmomo/p/1060066 ...
- 学习vue生命周期
首先,每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期.首先看一张图吧~这是官方文档上的图片相信大家一定都会很熟悉: 可以看到在vue一整个的生命周期中会有很多钩子函 ...
- 《区块链DAPP开发入门、代码实现、场景应用》笔记1——天外飞仙DAPP
Solidity编程语言解决了编写智能合约的不友好的问题,但是当合约编译并部署之后,对与这些接口的访问,对于一般的使用者来说,门槛有点高, 对普通用户来说也是非常不友好,为了使广大用户理解并方便快捷的 ...
- printk打印级别
默认级别 # cat /proc/sys/kernel/printk 4 4 1 7 分别是:控制台日志级别.默认的消息日志级别.最低的控制台日志级别和默认的控制台日志级别 举例 # echo 0 & ...
- Xcode调试打印方法
1 NSLog 在调试的过程中,最常用的查看变量值的方法是NSLog 整数 int a = 1; NSLog("%d", a); 浮点数 float b = 1.11; NSLog ...
- SparkStreaming+kafka Receiver模式
1.图解 2.过程 1.使用Kafka的High Level Consumer API 实现,消费者不能自己去维护消费者offset,而且kafka也不关心数据是否丢失. 2.当向zookeeper中 ...
- 深入理解JVM-hotspot虚拟机对象探秘
1.背景与大纲 在我们了解了java虚拟机的运行时数据区后,我们大概知道了虚拟机内存的概况,但是我们还是不清楚具体怎么存放的访问的: 接下来,我们将深入探讨HotSport虚拟机在java堆中对象的分 ...
- package-lock.json的作用(转载)
package-lock.json 文件的作用 来源 :https://www.cnblogs.com/kugeliu/p/9153775.html npm5之后安装文件之后会多出一个package ...
- sql server快捷键添加
工具--选项--键盘 sp_table_column_info p_helpindex sp_sql