android - 如何捕获媒体播放器数据源无文件错误?

标签 android error-handling media-player try-catch android-mediaplayer

我有一个媒体播放器应用程序,我在其中使用链接路径从我的服务器获取我的数据源。问题是我在测试的时候故意删除了我给 mp.setDataSource(musicUri); 的音频链接路径的数据源文件来检查但我似乎无法捕获错误并解决

我已经将 mp.prepare(); 替换为 mp.prepareAsync(); 并将简单的 mp.start() 替换为

mp.setOnPreparedListener(new OnPreparedListener() {

                @Override
                public void onPrepared(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    mp.start();
                }
            });

在开始之前监听媒体播放器是否准备好。

这是堆栈跟踪:

    07-23 13:55:52.492: E/MediaPlayer(6870): Attempt to call getDuration without a valid mediaplayer
    07-23 13:55:52.492: E/MediaPlayer(6870): error (-38, 0)
    07-23 13:55:52.492: E/MediaPlayer(6870): Error (-38,0)
    07-23 13:55:52.492: E/MediaPlayer(6870): stop called in state 0
    07-23 13:55:52.492: E/MediaPlayer(6870): error (-38, 0)
    07-23 13:55:52.492: E/MediaPlayer(6870): error (1, -107)

似乎没有任何效果,我想捕获这个错误来修复它对媒体播放器造成的异常结果。任何帮助都可以。谢谢!

编辑:

好的,所以我添加了 onErrorListener 但仍然无法正常工作:

mp.reset();
        mp.setDataSource(musicUri);
        mp.prepareAsync();
        // mp.prepare();
        mp.setOnErrorListener(new OnErrorListener() {
            @Override
            public boolean onError(final MediaPlayer mp, final int what,
                    final int extra) {
                Log.e(Constant.TAG_MYREC, "Error occurred while playing audio.");
                mp.stop();
                return false;
            }
        }); 
        mp.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                // TODO Auto-generated method stub
                mp.start();
            }
        });

最佳答案

mMediaPlayer.setOnErrorListener(new OnErrorListener() {
    @Override
    public boolean onError(final MediaPlayer mp, final int what,
            final int extra) {
        Log.e("Error occurred while playing audio.");
        mp.stop();

您可能在文件完全加载之前调用了 getDuration。看能不能解决this question适合你。

关于android - 如何捕获媒体播放器数据源无文件错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802625/

相关文章:

android - 如何在 Android 后台播放流式音频?

java - Eclipse Android - 应用程序启动时崩溃

java - Android 应用程序在尝试连接 SQLite 数据库时崩溃

web-applications - 基于 go 的 Web 应用程序中的错误页面

android - 视频 - 使用 VideoView/MediaPlayer 或 intent.action_view 和用户的选择?

iOS 视频播放器 FFmpeg

android - Jetpack Compose 可以从任何线程绘制/更新 UI 吗?

java - 从 Activity 向 Fragment 传递数据不起作用

c# - 在循环中捕获异步错误

c - 最终程序从 C 函数返回