Nicht in der Lage zu erstellen media-player (mit url)
Für die Wiedergabe von online-Musik-ich bin immer die Ausnahme im tun, im hintergrund. Ich bin nicht in der Lage das problem zu beheben.
01-08 09:42:05.199: E/MediaPlayer(16257): Unable to to create media player
01-08 09:42:05.209: W/System.err(16257): java.io.IOException: setDataSource failed.: status=0x80000000
01-08 09:42:05.229: W/System.err(16257): at android.media.MediaPlayer._setDataSource(Native Method)
01-08 09:42:05.229: W/System.err(16257): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1000)
01-08 09:42:05.229: W/System.err(16257): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:960)
01-08 09:42:05.229: W/System.err(16257): at com.example.audioplayer.MainActivity$Player.doInBackground(MainActivity.java:89)
01-08 09:42:05.229: W/System.err(16257): at com.example.audioplayer.MainActivity$Player.doInBackground(MainActivity.java:1)
01-08 09:42:05.229: W/System.err(16257): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-08 09:42:05.229: W/System.err(16257): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-08 09:42:05.229: W/System.err(16257): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-08 09:42:05.229: W/System.err(16257): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-08 09:42:05.239: W/System.err(16257): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-08 09:42:05.239: W/System.err(16257): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-08 09:42:05.239: W/System.err(16257): at java.lang.Thread.run(Thread.java:856)
01-08 09:42:05.389: D/Prepared(16257): //false
01-08 09:42:05.389: E/MediaPlayer(16257): start called in state 1
01-08 09:42:05.389: E/MediaPlayer(16257): error (-38, 0)
01-08 09:42:05.449: E/MediaPlayer(16257): Error (-38,0)
Dies ist der code:
public class MainActivity extends Activity {
private Button btn;
/**
* help to toggle between play and pause.
*/
private boolean playPause;
private MediaPlayer mediaPlayer;
/**
* remain false till media is not completed, inside OnCompletionListener make it true.
*/
private boolean intialStage = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button1);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
btn.setOnClickListener(pausePlay);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private OnClickListener pausePlay = new OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
//TODO Auto-generated method stub
if (!playPause) {
btn.setBackgroundResource(R.drawable.button_pause);
if (intialStage)
new Player()
.execute("http://www.virginmegastore.me/Library/Music/CD_001214/Tracks/Track1.mp3");
else {
if (!mediaPlayer.isPlaying())
mediaPlayer.start();
}
playPause = true;
} else {
btn.setBackgroundResource(R.drawable.button_play);
if (mediaPlayer.isPlaying())
mediaPlayer.pause();
playPause = false;
}
}
};
/**
* preparing mediaplayer will take sometime to buffer the content so prepare it inside the background thread and starting it on UI thread.
* @author piyush
*
*/
class Player extends AsyncTask<String, Void, Boolean> {
private ProgressDialog progress;
@Override
protected Boolean doInBackground(String... params) {
//TODO Auto-generated method stub
Boolean prepared;
try {
mediaPlayer.setDataSource(params[0]);//line 89
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
//TODO Auto-generated method stub
intialStage = true;
playPause=false;
btn.setBackgroundResource(R.drawable.button_play);
mediaPlayer.stop();
mediaPlayer.reset();
}
});
mediaPlayer.prepare();
prepared = true;
} catch (IllegalArgumentException e) {
//TODO Auto-generated catch block
Log.d("IllegarArgument", e.getMessage());
prepared = false;
e.printStackTrace();
} catch (SecurityException e) {
//TODO Auto-generated catch block
prepared = false;
e.printStackTrace();
} catch (IllegalStateException e) {
//TODO Auto-generated catch block
prepared = false;
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
prepared = false;
e.printStackTrace();
}
return prepared;
}
@Override
protected void onPostExecute(Boolean result) {
//TODO Auto-generated method stub
super.onPostExecute(result);
if (progress.isShowing()) {
progress.cancel();
}
Log.d("Prepared", "//" + result);
mediaPlayer.start();
intialStage = false;
}
public Player() {
progress = new ProgressDialog(MainActivity.this);
}
@Override
protected void onPreExecute() {
//TODO Auto-generated method stub
super.onPreExecute();
this.progress.setMessage("Buffering...");
this.progress.show();
}
}
@Override
protected void onPause() {
//TODO Auto-generated method stub
super.onPause();
if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}
}
}
Den link korrekt ist. Habe ich erwähnt, die Ausnahme generiert, die auf der Linie 89. Bitte finden Sie unter was ist schon falsch gibt.
Vielen Dank im Voraus...
InformationsquelleAutor Vivek Warde | 2015-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu schreiben, Ihre eigenen AsyncTask um dies zu umgehen, die
MediaPlayer
Klasse hat bereits einePrepareAsync
Methode, die handhaben das laden im hintergrund für Sie.Probieren Sie etwas wie dieses:
Habe ich auch vereinfacht, einige der code für meinen eigenen Willen.
Auch, vergessen Sie nicht, die INTERNET-permission im manifest:
<uses-permission android:name="android.permission.INTERNET"/>
Ich habe es vereinfacht, da brauchen Sie nicht Ihre eigenen AsyncTask, prepareAsync behandeln das laden im hintergrund. Der rest war nur auf die Zuhörer und die anderen Methoden, die ich nicht brauche, um zu demonstrieren, wie man diese Arbeit für Sie.
Vielen Dank, jeder Kostenlose server, den Sie wissen, wo lade ich meine mp3 , die so einen service virginmegastore.mir/Bibliothek/Musik/CD_001214/Tracks/Track1.mp3 , wo kann ich die url meiner eigenen mp3 -
Google Drive. Eine andere Sache, erwähnenswert ist, wenn Sie gehen, um sein Umgang mit der Wiedergabe von viele Musik-Dateien, sollten Sie ein service, um Ihre Wiedergabe-Methoden.
Ich habe versucht, google-Laufwerk, aber es hat die Möglichkeit, nur den download, dann habe ich versucht, soundcloud, lädt er die Seite dann startet die Musik aber nicht den gleichen service wie virginmegastore.mir/Bibliothek/Musik/CD_001214/Tracks/Track1.mp3 , andere alternative, die diese Dienste privide
InformationsquelleAutor Tim Malseed