Android mediaPlayer - 是否有"isPrepared()"或"getStatus()"方法?

Sta*_*wed 17 android android-mediaplayer

我遇到了Android的MediaPlayer问题.它似乎缺少重要的功能,主要是获取MediaPlayer的当前状态或查明它是否已准备好的方法.我知道有上准备好的倾听者,但MediaPlayer的持续时间超过了活动,所以当比赛动态重新开始,这将是很好的得到当前的播放器状态,不管它是不是试图加载介质,介质是否加载等我错过了什么,或者我是否必须自己跟踪玩家状态?

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

ale*_*lan 13

希望答案还不算太晚.在MediaPlayer的类有没有这样的事,作为一个isPrepared()或getStatus()方法,你必须追踪其自己的状态.然而,这并不困难.

MediaPlayer类有一个很好的状态图,真的有帮助.您应该根据该图实现您的服务.此外,如果您始终从同一个线程控制MediaPlayer对象,则很容易跟踪其状态,因此我建议您这样做.prepareAsync()方法是你必须要处理的唯一异步方法,但是你可以保留一个布尔值来指示玩家正在准备,从prepareAsync()调用开始就是'true',直到onPrepared()为止.调用.无论如何,你总是可以实现onError并捕获IllegalStateException以避免在你不小心从非法状态调用任何方法时崩溃.

尽管如此,媒体播放指南对我帮助很大.

  • 将此标记为已接受的答案.令人遗憾的是,用于媒体播放/消费的Android确实缺乏,甚至缺少状态检索等基本功能.围绕它的最佳方法是在MediaPlayer对象周围编写一个包装器并自己存储状态. (15认同)
  • 我自己遇到了这个问题.考虑到其方法对当前状态的敏感程度,这种荒谬的疏忽. (10认同)

arl*_*dia 8

我需要在调试时查看状态以解决问题,所以我只是在知道MediaPlayer准备好之后将这段代码放在某处:

try {
    this.audioPlayer.prepare();
} catch (Exception e) {
}
Run Code Online (Sandbox Code Playgroud)

这会向控制台输出一个错误,例如"E/MediaPlayer:在状态32中调用的prepareAsync".

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