AndroId MediaPlayer przygotowuje metodę Async
Mam dziwny problem. Używam metody prepareAsync zMediaPlayer
, ale słuchacz, którego oświadczyłem, nigdy nie zostanie zwolniony. Próbuję strumieniować na żywo.mp3
kanał z Internetu (stacja radiowa). Używam metody inline dla słuchacza, ale próbowałem również zaimplementować interfejs bez powodzenia. Oto część mojego kodu:
W sekcji członka:
<code>String url = "http://<my_url>.mp3"; MediaPlayer mediaPlayer = new MediaPlayer(); </code>
W działaniuonCreate()
:
<code>ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton); playButton.setOnClickListener(this); playButton.clearFocus(); playButton.setClickable(false); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton); playButton.setClickable(true); mp.start(); } }); preparePlayer(); </code>
Więc oto jestpreparePlayer()
metoda :
<code>private void preparePlayer() { if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); } mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(url); mediaPlayer.prepareAsync(); } catch (IllegalArgumentException e) { Toast.makeText( MyStreamActivity.this, getResources().getString(R.string.erreurIllegalArgument), Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IllegalStateException e) { Toast.makeText( MyStreamActivity.this, getResources().getString(R.string.erreurIllegalState), Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IOException e) { Toast.makeText( MyStreamActivity.this, getResources().getString(R.string.erreurIO), Toast.LENGTH_LONG).show(); e.printStackTrace(); } } </code>
I (tylko dla nagrania)onDetroy()
gdzie robię sprzątanie:
<code>private void releaseMediaPlayer() { if (mediaPlayer != null) { if(mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.release(); mediaPlayer = null; } } @Override protected void onDestroy() { super.onDestroy(); releaseMediaPlayer(); } </code>