首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MediaPlayer.setOnCompletionListener未执行

是指在使用Android MediaPlayer播放音频或视频时,设置的OnCompletionListener监听器没有被触发执行的情况。

MediaPlayer是Android提供的一个用于播放音频和视频的类,通过调用其setOnCompletionListener方法可以设置一个监听器,用于在媒体播放完成时执行相应的操作。

出现MediaPlayer.setOnCompletionListener未执行的情况可能有以下几个原因:

  1. 播放器状态不正确:在调用setOnCompletionListener方法之前,需要先调用MediaPlayer的prepare或者prepareAsync方法进行媒体资源的准备工作,确保播放器处于正确的状态。如果没有正确准备媒体资源,可能会导致监听器无法被执行。
  2. 播放器没有正常播放完成:如果媒体资源没有完整播放完成,而是被提前停止或者出现错误,那么OnCompletionListener监听器也不会被执行。可以通过调用MediaPlayer的stop或者release方法来停止播放器。
  3. 监听器设置错误:可能是由于代码逻辑错误或者监听器设置位置不正确导致监听器没有被正确设置。需要确保在调用MediaPlayer的start方法之前设置监听器,并且监听器的回调方法中包含了期望执行的操作。

针对以上问题,可以采取以下解决方案:

  1. 确保播放器状态正确:在调用setOnCompletionListener方法之前,先调用MediaPlayer的prepare或者prepareAsync方法进行媒体资源的准备工作,并确保准备工作完成后再调用start方法开始播放。
  2. 检查播放器的播放完成状态:可以通过添加日志或者调试信息来确认媒体资源是否完整播放完成,或者是否出现了错误。可以使用MediaPlayer的setOnErrorListener方法来监听错误发生的情况。
  3. 检查监听器设置位置和逻辑:确保在调用MediaPlayer的start方法之前设置监听器,并且监听器的回调方法中包含了期望执行的操作。可以使用Log或者Toast等方式输出调试信息,确认监听器是否被正确设置和执行。

腾讯云相关产品推荐:

  • 云音视频(https://cloud.tencent.com/product/vod):提供音视频处理、存储、分发等全套解决方案,适用于各类音视频应用场景。
  • 云服务器(https://cloud.tencent.com/product/cvm):提供弹性计算能力,适用于搭建各类应用和服务。
  • 云数据库MySQL版(https://cloud.tencent.com/product/cdb_mysql):提供高性能、可扩展的MySQL数据库服务,适用于存储和管理数据。
  • 人工智能(https://cloud.tencent.com/product/ai):提供丰富的人工智能服务,包括语音识别、图像识别、自然语言处理等,适用于各类智能应用场景。

以上是对于MediaPlayer.setOnCompletionListener未执行的问题的解答,希望能对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(五十七)录像录音与播放

MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频。其中对摄像头Camera的介绍参见《Android开发笔记(五十六)摄像头拍照》。 下面是MediaRecorder的常用方法: reset : 重置录制资源 prepare : 准备录制 start : 开始录制 stop : 结束录制 release : 释放录制资源 以上方法用于控制录像/录音操作。 setCamera : 设置摄像头对象 setPreviewDisplay : 设置预览界面。一般使用SurfaceHolder.getSurface setOrientationHint : 设置预览的角度。跟拍照一样一般设置90度 以上三个方法用于录制视频,如果仅是录音则不需要这三个方法。 setOnErrorListener : 设置错误监听器。可监听服务器异常以及未知错误的事件。 setOnInfoListener : 设置信息监听器。可监听录制结束事件,包括达到录制时长或者达到录制大小。 以上方法用于关联录像工具和事件。 setAudioSource : 设置音频来源。一般使用麦克风AudioSource.MIC。 setOutputFormat : 设置媒体输出格式。OutputFormat.AMR_NB表示窄带格式,OutputFormat.AMR_WB表示宽带格式,AAC_ADTS表示高级的音频传输流格式。该方法要在setVideoEncoder之前调用,不然调用setAudioEncoder时会报错“java.lang.IllegalStateException”。 setAudioEncoder : 设置音频编码器。AudioEncoder.AMR_NB表示窄带编码,AudioEncoder.AMR_WB表示宽带编码,AudioEncoder.AAC表示低复杂度的高级编码,AudioEncoder.HE_AAC表示高效率的高级编码,AudioEncoder.AAC_ELD表示增强型低延迟的高级编码。 注意:setAudioEncoder应在setOutputFormat之后执行,否则会出现“setAudioEncoder called in an invalid state(2)”的异常。 setAudioSamplingRate : 设置音频的采样率,单位赫兹(Hz)。该方法为可选,AMRNB默认8khz,AMRWB默认16khz。 setAudioChannels : 设置音频的声道数。1表示单声道,2表示双声道。该方法为可选 setAudioEncodingBitRate : 设置音频每秒录制的字节数。越大则音频越清晰。该方法为可选 以上六个方法用于录制音频。 setVideoSource : 设置视频来源。一般使用摄像头VideoSource.CAMERA。 setOutputFormat : 设置媒体输出格式。OutputFormat.MPEG_4表示MPEG4格式,OutputFormat.THREE_GPP表示3GP格式。该方法要在setVideoEncoder之前调用。 setVideoEncoder : 设置视频编码器。VideoEncoder.MPEG_4_SP表示MPEG4编码,H263表示h263编码,H264表示h264编码。 setVideoSize : 设置视频的分辨率。 setVideoEncodingBitRate : 设置视频每秒录制的字节数。越大则视频越清晰。该方法为可选 setVideoFrameRate : 设置视频每秒录制的帧数。越大则视频越连贯,当然大小也越大。该方法为可选 以上六个方法用于录制视频,如果仅是录音则不需要这五个方法。 setMaxDuration : 设置录制时长。单位毫秒。 setMaxFileSize : 设置录制的媒体大小。单位字节。 setOutputFile : 设置输出文件的路径。 以上方法用于设置录像/录音参数。

05

android实现小音频频繁播放

android中多媒体文件(音乐和视频)的播放是用MediaPlayer方式是大家比较熟悉的,但是现在要来说一下另外一种音乐文件播放的方式SoundPool,相比较而言,用MediaPlayer来播放音乐的话,占用的系统资源是很多的,加载资源也需要时间,所以它不适合用来频繁播放小音频文件,比如控件焦点、点击时需要播放小音频文件,这个时候用SoundPool来播放音频文件,比用MediaPlayer来播放效率要高很多。这里也来说说,如果用MediaPlayer来播放小音频文件的话,会出现延时,点击了之后等会儿才出现声音。所以,SoundPool比MediaPlayer更轻量级,适合用于频繁播放的小音频文件。 下面就来说说它的用法:

02
领券