0

我正在制作一个流媒体音乐的应用程序。我正在使用 aservice在后台播放在线 mp3 文件中的音乐。但是该服务停止prepareAsync()并且永远不会完成准备,因此音乐播放不会开始。IE。该onPrepared()方法永远不会被调用。注意:我在 anactivity而不是 a中使用了相同的代码,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");
    }


} 
4

1 回答 1

2

如果您还发布了正在生成的 logcat,那就太好了。但是,由于您是 IntentService 的子类,因此一旦您对 prepareAsync() 的调用完成,服务就会自行停止。这样做的原因是因为此时您已经有效地完成了对意图的处理。在这一点上,有几种不同的方法可以解决这个问题。最快但不是最好的方法是更改​​代码,以便调用 prepare() 而不是 prepareAsync(),然后 start() 播放器并注释掉注册 onPreparedListener 的行。我认为最好的方法是直接从 Service 子类化并覆盖 onStartCommand()。

于 2013-04-28T17:16:56.773 回答