MediaPlayer的:可以在客户端无法打开文件;误差(-38,0),更 [英] MediaPlayer: Couldn't open file on client side; Error(-38,0) and more

查看:216
本文介绍了MediaPlayer的:可以在客户端无法打开文件;误差(-38,0),更的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我学习Android和我已经创建了一个有两个按钮的活动:切换按钮(播放/暂停)和一个按钮(下一步)。我有两首歌曲,就是想在pressing下一步进行循环。我有一个数组

I'm learning Android and I've created an activity that has two buttons:A ToggleButton(Play/Pause) and a Button(Next). I have two songs that would like to be cycled upon pressing Next. I have an array

INT [] =歌曲{R.raw.song1,R.raw.song2};

我推翻onClick的在我的活动。第一首歌发挥的罚款;但经过pressing接下来,我得到以下错误:

I overrode the onClick in my Activity. The first song plays fine; but after pressing Next, I get the following errors:

可以在客户端无法打开文件,试图服务器端

Couldn't open file on client side, trying server side

E / MediaPlayer的(3107):启动名为状态4

E/MediaPlayer(3107): start called in state 4

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

E/MediaPlayer(3107): error (-38, 0)

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

E/MediaPlayer(3107): Error (-38,0)

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

E/MediaPlayer(3107): error (1, -2147483648)

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

E/MediaPlayer(3107): Error (1,-2147483648)

在的onCreate(捆绑...),

In onCreate(Bundle...),

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

下面是我的onClick(视图v)方法:

Here's my onClick(View v) method:

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;
    }
}

基本上,我这样做是为下一步按钮的每preSS:
-reset MP(即MediaPlayer对象)
-set新的数据源播放下一首歌曲
-start熔点

Basically, I'm doing this for every press of the Next button: -reset mp (i.e. the MediaPlayer object) -set a new data source for playing the next song -start mp

至于用西顿preparedListener prepareAsync ,我读的this SO质疑

我在哪里去了?

推荐答案

我相信你设置数据源错误的。

I believe you are setting the datasource wrong.

将其更改为:

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

注意包名后斜杠。

Notice the trailing slash after the package name.

这篇关于MediaPlayer的:可以在客户端无法打开文件;误差(-38,0),更的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆