2014-07-22 167 views
2

我遇到了MediaPlayer的问题。这是在SherlockFragment,它在我使用XML创建按钮时起作用。Android MediaPlayer错误-1004

工作的代码是这样的:

@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上测试,这可能是问题吗?

回答

0

这是解决方案:

<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

0

错误代码1004困扰我在一些设备中了。最后,我编码了URL并解决了它!

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