서비스로 MediaPlayer를 사용하여 구현하려는 웹 라디오 스트림이 있습니다. 기본 활동에 2 개의 버튼이 있으며, 서비스를 의도로 설정 한 & stop을 재생 한 다음 서비스를 시작 또는 중지하십시오. 호출되지 않습니다 버튼Android : 서비스가 MediaPlayer.onPreparedListener를 구현합니다.
RadioPlayer 서비스
public class RadioPlayer extends Service implements MediaPlayer.OnPreparedListener{
public static String ACTION_PLAY = "ACTION_PLAY";
private MediaPlayer mediaplayer = null;
private boolean isPlaying = false;
public int onStartCommand(Intent intent, int flags, int startId){
Log.d("SERVICE", "Started");
if(intent.getBooleanExtra(ACTION_PLAY, false)){
play();
}
return Service.START_STICKY;
}
private void play(){
Log.d("SERVICE", "play()");
if(!isPlaying){
isPlaying = true;
try{
Log.d("SERVICE", "1");
mediaplayer = new MediaPlayer();
Log.d("SERVICE", "2");
mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.d("SERVICE", "3");
mediaplayer.setDataSource("http://X.X.X.X");
Log.d("SERVICE", "4");
mediaplayer.prepareAsync();
Log.d("SERVICE", "5");
} catch(Exception e){
e.printStackTrace();
}
}
}
public void onDestory(){
Log.d("SERVICE", "Stop");
stop();
}
private void stop(){
Log.d("SERVICE", "stop()");
if(isPlaying){
isPlaying = false;
if(mediaplayer != null){
mediaplayer.stop();
mediaplayer.release();
mediaplayer = null;
}
//stopForeground(true);
}
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.d("SERVICE", "onPrepared()");
mediaplayer.start();
//i have also attempted mp.start() with no cigar
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
onPrepared (MediaPlayer를의 MP)에 따라 (& 내가로드 할 수있는 스트림 시간의 좋은 금액을 기다렸다). onPreparedListener를 성공적으로 구현하는 데 필요한 서비스가 누락 되었습니까?
Log cat 출력의 측면에서, 내가 인식하지 못하는 경우에만 발생하는 것은 데이터 소스가 억압되었다고 말하는 AwesomePlayer ...?
06-19 16:45:04.090: D/pre-SERVICE(22731): clicked()
06-19 16:45:04.090: D/SERVICE(22731): Started
06-19 16:45:04.090: D/SERVICE(22731): play()
06-19 16:45:04.090: D/SERVICE(22731): 1
06-19 16:45:04.110: W/qdhwcomposer(327): Excessive delay reading vsync: took 66 ms
06-19 16:45:04.110: D/SERVICE(22731): 2
06-19 16:45:04.110: D/SERVICE(22731): 3
06-19 16:45:04.110: I/AwesomePlayer(331): setDataSource_l(URL suppressed)
06-19 16:45:04.110: D/SERVICE(22731): 4
06-19 16:45:04.110: D/SERVICE(22731): 5
06-19 16:45:04.190: W/qdhwcomposer(327): Excessive delay reading vsync: took 49 ms
UPDATE 단지 .onPrepare으로 시도 후 나는이 비동기 스타일의 작업을 수행하는 경우, 작업 할 수있는 서비스를받을 수 관리 한 문제는 여전히 그건
내가 아니라, 스트림이 완료 결코로 onCompletionListener는 인터넷 스트림과 일하는 것이 확실하지 않다를 사용하여 sucsessful 스트림을 얻을 관리 않았다. 나는 단지 그것을 시도했습니다. 준비하고 작동합니다! 그러나 질문은 여전히 비동기 적으로 그것에 대해 서있다. –
나는 그것을 스트림으로 시도해 보았고 작동한다. 'prepareAsync'에 대한 문서에서는 "스트림의 경우 prepareAsync()를 호출해야합니다. 충분한 데이터가 버퍼링 될 때까지 차단하는 것이 아니라 즉시 반환됩니다." – ggueno