【问题标题】:Android MediaPlayer Error -1004Android 媒体播放器错误 -1004
【发布时间】:2015-01-28 11:04:35
【问题描述】:

我在使用 MediaPlayer 时遇到问题。这是在 SherlockFragment 中,当我使用 XML 创建按钮时它起作用了。

工作代码如下所示:

@Override
public void onClick(View v) {
    switch (v.getId()) {

    case R.id.stop:
        if(mPlayer!=null && mPlayer.isPlaying()){
            mPlayer.stop();
            buttonPlay.setText("Play");
            mPlayer.reset();
            buttonPlay.setEnabled(true);
        }
        break;
    case R.id.play:
        mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        buttonPlay.setEnabled(false);
        buttonPlay.setText("Playing...");
        try {
            mPlayer.setDataSource(url);
        } catch (IllegalArgumentException e) {
            Toast.makeText(getActivity(), "mPlayer.setDataSource(url); error 1", Toast.LENGTH_LONG).show();
        } catch (SecurityException e) {
            Toast.makeText(getActivity(), "mPlayer.setDataSource(url); error 2", Toast.LENGTH_LONG).show();
        } catch (IllegalStateException e) {
            Toast.makeText(getActivity(), "mPlayer.setDataSource(url); error 3", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
        }

        mPlayer.prepareAsync();  
        final ProgressDialog progressDialog;
        progressDialog = ProgressDialog.show(getActivity(), "", "Fetching files...");
        mPlayer.setOnPreparedListener(new OnPreparedListener() {  
            @Override  
            public void onPrepared(MediaPlayer mp) {  
                //Now dismis progress dialog, Media palyer will start playing
                progressDialog.dismiss();
                mp.start();  
            }  
        });
        break;
    }
}

它工作得很好,但我需要它来处理像这样以编程方式创建的按钮:

           play[i].setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Log.e("button", "play clicked ");
                    mPlayer = new MediaPlayer();
                    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    try {
                        mPlayer.setDataSource(url);
                    } catch (IllegalArgumentException e) {
                        Toast.makeText(getActivity(), "mPlayer.setDataSource(url); error 1", Toast.LENGTH_LONG).show();
                    } catch (SecurityException e) {
                        Toast.makeText(getActivity(), "mPlayer.setDataSource(url); error 2", Toast.LENGTH_LONG).show();
                    } catch (IllegalStateException e) {
                        Toast.makeText(getActivity(), "mPlayer.setDataSource(url); error 3", Toast.LENGTH_LONG).show();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    play[a].setText("Playing...");

                    for(int j =0; j < jsons.length; j++){
                        if(a != j ){
                            play[j].setEnabled(false);
                            stop[j].setEnabled(false);
                            Log.e("button", "making buttons false");
                        }
                    }

                    mPlayer.prepareAsync();  
                    final ProgressDialog progressDialog;
                    progressDialog = ProgressDialog.show(getActivity(), "", "Fetching files...");
                    mPlayer.setOnPreparedListener(new OnPreparedListener() {  
                        @Override  
                        public void onPrepared(MediaPlayer mp) {  
                            //Now dismis progress dialog, Media palyer will start playing
                            progressDialog.dismiss();
                            mp.start();  
                            Log.e("button", "playing ");
                        }  
                    });
                }
            });

            stop[i].setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    Log.e("button", "stop clicked ");
                }
            });

我明白了:

E/MediaPlayer(8362): error (1, -1004)
E/MediaPlayer(8362): Error (1,-1004)

url = "http://******.******.ie/music/Mark%20Beswick%20-%20My%20Help.mp3";

请问我做错了什么?

顺便说一句,我正在 4.1.1 Android 上进行测试,这可能是问题所在吗?

【问题讨论】:

    标签: java android media-player onclicklistener


    【解决方案1】:

    这是解决方案:

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

    感谢这个问题的第一个答案 - Play SoundCloud Track

    【讨论】:

      【解决方案2】:

      错误代码 1004 在某些设备上也困扰着我。最后,我对网址进行了编码并解决了!

      url = "http://******.******.ie/" + Uri.encode("music/Mark Beswick - My Help.mp3");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多