[英]Android MediaPlayer Error -1004
我在使用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上進行測試,這可能是問題嗎?
這是解決方案:
<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" />
感謝此問題的第一個答案- 播放SoundCloud Track
錯誤代碼1004在某些設備中也使我感到困擾。 最后,我對URL進行了編碼並解決了!
url = "http://******.******.ie/" + Uri.encode("music/Mark Beswick - My Help.mp3");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.