2012-08-09 103 views
12

我遇到了Android的MediaPlayer问题。它似乎缺少重要的功能,主要是获取MediaPlayer当前状态的方法或查明它是否已准备就绪。我知道有准备好的监听器,但MediaPlayer的持续时间比活动时间长,所以当播放活动恢复时,获得当前播放器状态,无论是否尝试加载媒体,媒体是否加载等都会很好。 。我错过了什么,还是我必须跟踪自己的玩家状态?Android mediaPlayer - 有没有“isPrepared()”或“getStatus()”方法?

其他功能,这将是很好的onPlayStateChanged() - 我目前必须保持跟踪播放状态手动。我做错了吗?

回答

11

希望答案不晚。 MediaPlayer类没有isPrepared()或getStatus()方法这样的事情,你必须自己跟踪它的状态。但是,这并不困难。

MediaPlayer类有一个很好的状态图,真的有帮助。您应该根据该图实现您的服务。另外,如果您始终从同一个线程控制MediaPlayer对象,则很容易跟踪其状态,所以我建议您这样做。 prepareAsync()方法是唯一需要照顾的异步方法,但是您可以保留一个表示玩家正在准备的布尔值,从prepareAsync()调用开始,这将是'true',直到onPrepared()为调用。无论如何,如果您意外地从非法状态调用任何方法,您总是可以实现onError并捕获IllegalStateException以避免崩溃。

尽管如此,media playback guide帮了我很多。

+8

标记为接受答案。可悲的现实是Android对于媒体播放/消费的确很缺乏,甚至缺少状态检索等基本功能。最好的解决方法是你自己编写一个包装MediaPlayer对象和存储状态的包装。 – StackOverflowed 2014-04-04 23:06:06

+5

自己刚刚遇到这个问题。鉴于其方法对现状的敏感程度如此荒谬。 – 2015-08-13 12:18:58

7

我需要看到的状态,同时调试来解决问题,所以我就放在这个代码的地方后,我知道的MediaPlayer已准备:

try { 
    this.audioPlayer.prepare(); 
} catch (Exception e) { 
} 

,打印错误像“E控制台/ MediaPlayer:在状态32中调用prepareAsync。“

现在,如果我只能找到一个地方所有的状态代码列出...

+0

我想知道你是否知道状态码列表。 :) – Talha 2017-10-30 11:01:22

相关问题