медиаплеер и сервисный класс - PullRequest
1 голос
/ 06 февраля 2012

У меня есть класс обслуживания, который запускает мой медиаплеер, он работает нормально, моя единственная проблема в том, что когда мой сервис создает медиаплеер, он несколько приостанавливает мой пользовательский интерфейс, например зависает, или что-то подобное, пока мой медиаплеер не создаст его самостоятельно.Что я хочу, чтобы это произошло, так это то, что когда я нажимаю кнопку воспроизведения, появляется сообщение с тостом и отображается «Соединение», а когда медиаплеер готов, отображается сообщение с тостом «Подключено», а затем медиаплеер начинает воспроизводить музыку, так как мой тост не отображается, и если ониопоздал ..

вот мой сервисный код:

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 голосов
/ 08 февраля 2012

Замените

      player = MediaPlayer.create(this, source);

на

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

MediaPlayer.create вызывает prepare() метод для подготовки MediaPlayer, который является синхронной операцией и вешает пользовательский интерфейс, поэтому вы будете испытывать задержку вваш пользовательский интерфейс.Поэтому вы должны явно использовать .prepareAsync(), чтобы избежать этой задержки, как указано в примере выше.

...