我正在制作一个流式传输音乐的应用。我正在使用service
在后台播放来自在线mp3文件的音乐。但是服务在prepareAsync()
停止并且从未完成准备,因此音乐播放不会开始。即。永远不会调用onPrepared()
方法。注意:我在activity
而不是service
中使用相同的代码,但不会出现此问题。这有什么不对?代码:
public class mp3playerservice extends IntentService implements OnPreparedListener {
String track;
String info[];
String name;
MediaPlayer mp;
Bundle extras;
public mp3playerservice() {
super("mp3playerservice");
}
// Will be called asynchronously be Android
@Override
protected void onHandleIntent(Intent intent) {
extras = intent.getExtras();
info=extras.getStringArray("info");
track=info[1];
name=info[0];
mp= new MediaPlayer();
if(mp.isPlaying()){
mp.release();
mp=new MediaPlayer();
}
start1(track);
}
void start1(String a){
try{
mp.setDataSource(a);
mp.setOnPreparedListener(this);
mp.prepareAsync();
}catch(Exception e){
Log.d("error is "+e.toString(),"error came up");
}
}
public void onPrepared(MediaPlayer mp4){
mp.start();
Log.d("in here2","okay");
}
}
答案 0 :(得分:2)
如果您还发布了正在生成的logcat,那将会很棒。但是,由于您是IntentService的子类,因此一旦您对prepareAsync()的调用完成,服务就会自动停止。原因是因为那时你已经有效地完成了对意图的处理。此时,有几种不同的方法可以解决这个问题。最快捷的方式,但不是最好的方法,是更改代码,以便调用prepare()而不是prepareAsync(),然后启动()播放器并注释掉注册onPreparedListener的行。我认为最好的方法是直接从Service子类化并覆盖onStartCommand()。