【问题标题】:MediaPlayer : Should have subtitle controller already set: KitKatMediaPlayer:应该已经设置了字幕控制器:KitKat
【发布时间】:2014-03-14 11:46:50
【问题描述】:

我遇到了一个奇怪的问题,我的音频文件有时会播放,有时不播放。问题是,当它决定不玩时,DDMS 会给我一个:

E/MediaPlayer﹕ Should have subtitle controller already set

因为这是一对一的音乐没有播放,我已经确定这可能是问题......

如果音乐没有播放并且我按下音量按钮,它就会开始播放。 如果我等待大约 30 秒没有播放,它会重新开始(不循环)。

这是怎么回事?我正在使用 KitKat

        player = new MediaPlayer();
        AssetFileDescriptor afd = null;
        try {
            afd = getAssets().openFd("Theme.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            player.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        player.setLooping(true); //restart playback end reached
        //player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
        player.start(); //start play back

【问题讨论】:

标签: android android-mediaplayer android-4.4-kitkat


【解决方案1】:

查看 StackOverflow 上的 previous discussion 和引用的 Android commit,上面的代码可能无法完全初始化 MediaPlayer 对象。

用于媒体播放的KitKat example code 建议您致电:

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

在你构造MediaPlayer之后,在你调用它的setDataSource方法之前。

【讨论】:

  • 这并没有改变任何东西。
  • 我不完全确定当时发生了什么。日志语句应该足以自行停止程序;唯一会执行此操作的 Android 日志是 Log.wtf。也许问题与上面发布的代码的调用方式有关?
  • 可能是。我正在运行处理(扩展 pApplet)并在销毁 onPause 等时调用覆盖 onStart 的播放器逻辑...
  • 虽然这更具推测性 - 我从未使用过 Processing - 您可能会考虑使用 MediaPlayer asynchronously。 Processing 尝试在运行时处理应用线程的方式与同步 MediaPlayer 调用期望处理它们的方式之间可能存在冲突。
  • 我使用谷歌推荐的代码,包括 setAudioStreamType() ,但我仍然收到此错误。在主线程和异步中尝试过。同样的错误。
【解决方案2】:

我遇到了同样的问题,我通过在实例化 MediaPlayer 后添加以下内容来修复它。

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        if (mp == mediaPlayer) {
                            mediaPlayer.start();
                        }
                    }
                });

以前我正在实现 MediaPlayer.OnPreparedListener 并覆盖 onPrepared() 但它不起作用。

我希望这会有所帮助!

【讨论】:

    【解决方案3】:

    这应该可以解决您的问题(为我解决了问题):将其余代码后面的“player.start()”行替换为如下所示的异步回调:

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            mediaPlayer.start();
        }
    });
    

    这个错误只是一个 Log.e,而不是真正的错误。它不应该导致你的玩家不玩,我猜这只是因为当你尝试调用 start() 时玩家还没有完成准备。

    E/MediaPlayer﹕ Should have subtitle controller already set
    

    【讨论】:

    • 不,这没有影响。我在这里遇到了同样的问题,而且我的代码曾经运行得很好。现在,在看到错误日志后,我立即停止(音频,而不是应用程序 - 应用程序很好,例如我可以启动另一个音轨)。
    【解决方案4】:

    我已经很久没有开发这个应用程序了。这是我最终为使其正常工作所做的工作。 (在 KitKat 和 Lollipop 上测试)。我认为从 MediaPlayer 切换到 APMediaPlayer 是诀窍的一部分。

    @Override
    public void onDestroy() {
        if(player != null) {
            player.release();
            player = null;
        }
        super.onDestroy();
    }
    
    
    @Override
    public void onStart() {
        super.onStart();
        if(player != null) {
            player.start();
        }
        else {
            player = new APMediaPlayer(this); //create new APMediaPlayer
            player.setMediaFile("Theme.mp3"); //set the file (files are in data folder)
            player.start(); //start play back
            player.setLooping(true); //restart playback end reached
            player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
        }
    
    }
    
    @Override
    public void onResume() {
        super.onResume();
        if(player != null) {
            player.start();
        }
    
    }
    

    【讨论】:

      【解决方案5】:

      在清单文件中设置可能会对您有所帮助

       <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
      

      【讨论】:

      • 这对OP提供的问题没有影响。
      • 这与问题完全无关。
      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多