Android: correct usage of PrepareAsync() in media player activity

前端 未结 1 1319
生来不讨喜
生来不讨喜 2020-12-10 15:36

I\'m following this tutorial, but the usage of prepareAsync is not clear and my code does not output any audio. I\'m using prepareAsync() because my mp3 is online and I don\

相关标签:
1条回答
  • The solution is to call the setOnPreparedListener of myMediaPlayer object and wait until prepareAsync() method has finished.

    package com.example.simplemediaplayer.app;
    
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    
    import java.io.IOException;
    
    
    public class MediaPlayerActivity extends ActionBarActivity {
    
        private static final String TAG = "tag";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_media_player);
    
            String url = "http://www.brothershouse.narod.ru/music/pepe_link_-_guitar_vibe_113_club_mix.mp3"; // your URL here
            MediaPlayer myMediaPlayer = new MediaPlayer();
            myMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                myMediaPlayer.setDataSource(url);
                myMediaPlayer.prepareAsync(); // prepare async to not block main thread
    
            } catch (IOException e) {
                Toast.makeText(this, "mp3 not found", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
    
            //mp3 will be started after completion of preparing...
            myMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    
                @Override
                public void onPrepared(MediaPlayer player) {
                    player.start();
                }
    
            });
    
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.media_player, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }
    
    0 讨论(0)
提交回复
热议问题