2016级移动应用开发在线测试14-MediaPlayer

2022-04-29 08:04:16 浏览数 (2)

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.

0 人点赞