android - 媒体播放器 : Couldn't open file on client side; Error(-38, 0) 等等

标签 android android-mediaplayer

我正在学习 Android,我创建了一个具有两个按钮的 Activity :一个 ToggleButton(播放/暂停)和一个 Button(下一步)。我有两首歌曲希望在按下 Next 时循环播放。我有一个数组

int [] songs={R.raw.song1,R.raw.song2};

我在我的 Activity 中覆盖了 onClick。第一首歌很好听;但在按下 Next 后,出现以下错误:

无法在客户端打开文件,尝试在服务器端打开

E/MediaPlayer(3107): 在状态 4 开始调用

E/MediaPlayer(3107): 错误 (-38, 0)

E/MediaPlayer(3107): 错误 (-38,0)

E/MediaPlayer(3107): 错误 (1, -2147483648)

E/MediaPlayer(3107): 错误(1,-2147483648)

在 onCreate(Bundle...) 中,

if(mp!=null) mp.release();
  mp=MediaPlayer.create(this, songs[count]);

这是我的 onClick(View v) 方法:

public void onClick(View view) {    
    Log.v(TAG,"ID:"+view.getId());
    switch (view.getId()) {
    case R.id.playerbutton:  //ToggleButton
        if(state==0) {
            mp.start();
            state=1;
        }
        else if(state==1) {
            state=0;
            mp.pause();
        }   
    break;

    case R.id.next:  //Next button
        Log.v(TAG,"Next button pressed!");
        count=(count+1)%2;  //Have only two songs
        mp.reset();
        try {
            mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp"+songs[count]));
            mp.setOnPreparedListener(this);
            mp.prepareAsync();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        mp.start();
    break;
    }
}

基本上,每次按下“下一步”按钮时我都会这样做: -reset mp(即 MediaPlayer 对象) - 为播放下一首歌曲设置一个新的数据源 -启动 mp

关于使用setOnPreparedListenerprepareAsync,我看了this SO question .

我哪里错了?

最佳答案

我认为您设置的数据源有误。

将其更改为:

mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));

注意包名后面的斜杠。

关于android - 媒体播放器 : Couldn't open file on client side; Error(-38, 0) 等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865836/

相关文章:

Android:在服务器上播放 mp3 文件时出现异常。

java - 暂停时如何恢复 MediaPlayer

Android Visualizer 不会从 Spotify 流媒体音乐中获取音频

Android mediaplayer 音乐暂停有时不起作用

android - 如何在输入法的输入区使用自定义字体?

java - Android 将值从 onPostExecute 传递到 Activity

java - 从共享首选项将数组传递到 ArrayAdapter。安卓

java - 在 Android 中解析一些 HTML 代码的最佳方法

android - 使用 MediaPlayer 同时播放多个音频

android - "Glooming"ListView底部效果层