Есть ли хороший способ воспроизвести аудио медиаплеер в хранилище Firebase с Android? - PullRequest
0 голосов
/ 26 сентября 2019

Во-первых, это мой код PlayActivity:

public class PlayActivity extends AppCompatActivity {

    ...

    MediaPlayer mediaPlayer;
    private boolean isPlaying;
    private boolean initialStage = true;

    ProgressDialog progressDialog;
    String songUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);

        ...

        Intent intent = getIntent();

        songUrl = intent.getStringExtra(SONG_URL);
        playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playButton.setVisibility(View.GONE);
                pauseButton.setVisibility(View.VISIBLE);
            }
        });

        pauseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playButton.setVisibility(View.VISIBLE);
                pauseButton.setVisibility(View.GONE);
            }
        });

        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        progressDialog = new ProgressDialog(this);

        if (!isPlaying) {
            if (initialStage) {
                new Player().execute(songUrl);
            } else {
                if (!mediaPlayer.isPlaying()) {
                    mediaPlayer.start();
                }
            }
            isPlaying = true;
        } else {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
            }
            isPlaying = false;
        }      
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mediaPlayer != null) {
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }

    class Player extends AsyncTask<String, Void, Boolean> {
        @Override
        protected Boolean doInBackground(String... strings) {
            Boolean prepared = false;

            try {
                mediaPlayer.setDataSource(strings[0]);
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        initialStage = true;
                        isPlaying = false;
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                    }
                });

                mediaPlayer.prepare();
                prepared = true;
            } catch (IOException e) {
                prepared = false;
            }

            return prepared;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);

            if (progressDialog.isShowing()) {
                progressDialog.cancel();
            }

            mediaPlayer.start();

            initialStage = false;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            progressDialog.setMessage("Please Wait...");
            progressDialog.show();
        }
    }
}

Когда в MainActivity есть кнопка, которая отправляет намерение SONG_URL.Затем получите его значение и установите значение new Player().execute(songUrl);.Но когда я играю музыку на своем мобильном телефоне, это время задержки случайно.Иногда это быстро, иногда медленно ... Не могли бы вы дать мне лучший способ кодирования PlayActivity в хранилище Firebase с Android ??

...