媒体播放器和服务类

时间:2012-02-06 17:51:54

标签: java android service media-player android-mediaplayer

我有一个运行我的媒体播放器的服务类它工作正常,我唯一的问题是,当我的服务创建媒体播放器时,它有点暂停我的用户界面像挂起或其他东西,直到我的媒体播放器完成自己创建它。我想要发生的是当我按下播放按钮时出现一个Toast消息并显示“正在连接”,当准备好媒体播放器时,显示一个Toast消息显示“已连接”然后媒体播放器开始播放音乐,不知何故我的吐司没有显示,如果他们做得很晚..

继承我的服务代码:

public class myservice extends Service {

MediaPlayer player;
private Handler UIHandler = new Handler();
private Uri source = Uri.parse("http://www.mydomain.com:8000/listen.mp3");

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

public void onCreate() {
    Toast.makeText(this, "Connecting", Toast.LENGTH_SHORT).show();
            player = MediaPlayer.create(this, source);
}

private void testtoast() {
    Toast.makeText(this, "Connecting", Toast.LENGTH_SHORT).show();
}

public void onStart(Intent intent, int StartId) {
    Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
    player.setOnPreparedListener( new OnPreparedListener() {
        public void onPrepared(MediaPlayer player) {
            // TODO Auto-generated method stub
            player.start();
        }
    });
}

public void onDestroy() {
    Toast.makeText(this, "Destroyed", Toast.LENGTH_SHORT).show();
    player.stop();
    player.release();
}
  }

1 个答案:

答案 0 :(得分:0)

替换

      player = MediaPlayer.create(this, source);

      player = new MediaPlayer();
      player.setDataSource(source);
      player.prepareAsync();

MediaPlayer.create调用prepare()方法来准备MediaPlayer,这是一种同步操作并挂起UI,因此您的UI会遇到延迟。因此,您应该明确使用.prepareAsync()来避免此延迟,如上例所示。