Как я могу заставить медиаплеер воспроизводить музыку с помощью URL-ссылки?

#android #url #android-mediaplayer

Вопрос:

Я сделал в течение некоторого времени приложение с медиаплеером. Но после ряда обновлений я понял, что пространство, необходимое для загрузки приложения, стало очень большим. Я решил изменить метод и заставить плееры воспроизводить музыку через Интернет по URL-ссылке, но я понятия не имею, как это сделать. Я считаю, что я должен установить mediaplayer.setDataSource, а затем поместить ссылку. Но после этого он не работает с моим кодом. Кто-нибудь знает, как преобразовать мой код для работы этим методом?

Часть моего текущего кода:

   mediaPlayer = MediaPlayer.create(this,R.raw.storm);

    runnable = new Runnable() {
        @Override
        public void run() {
            seekBar.setProgress(mediaPlayer.getCurrentPosition());

            handler.postDelayed(this,500);
        }
    };

    int duration = mediaPlayer.getDuration();

    String sDuration = convertFormat(duration);

    playerDuration.setText(sDuration);

    btPlay.setOnClickListener(v -> {

        mediaPlayer.start();

        seekBar.setMax(mediaPlayer.getDuration());

        handler.postDelayed(runnable, 0);

        btPlay.setVisibility(View.GONE);

        btPause.setVisibility(View.VISIBLE);
    });

    btPause.setOnClickListener(v -> {

        mediaPlayer.pause();

        btPlay.setVisibility(View.VISIBLE);
        btPause.setVisibility(View.GONE);

        handler.removeCallbacks(runnable);
    });


    seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
            if (b) {

                mediaPlayer.seekTo((int) progress);

            }
            playerPosition.setText(convertFormat(mediaPlayer.getCurrentPosition()));
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });

    mediaPlayer.setOnCompletionListener(mp -> {
        btPause.setVisibility((View.GONE));

        btPlay.setVisibility(View.VISIBLE);

        mediaPlayer.seekTo(0);
    });


}
 

Ответ №1:

Пожалуйста, попробуйте использовать приведенный ниже код для воспроизведения музыки по URL

Kotlin:

  val mediaPlayer = MediaPlayer()
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
        try {
            mediaPlayer.setDataSource(yourSongUrl)
            mediaPlayer.prepare()
            mediaPlayer.start()
        } catch (e: IOException) {
            e.printStackTrace()
        }
        Log.v(TAG,"Music is streaming")
 

Java:

  MediaPlayer mediaPlayer = new MediaPlayer();

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        try {
            mediaPlayer.setDataSource(yourSongUrl);
            mediaPlayer.prepare();
            mediaPlayer.start();

        } catch (IOException e) {
            e.printStackTrace();
        }
       Log.v(TAG,"Music is streaming")
 

Если вы ориентируетесь на уровень API 26 или выше, theb setAudioStreamType() устарел. Поэтому попробуйте выполнить приведенный ниже код:

  //java
 mediaPlayer.setAudioAttributes(
                new AudioAttributes
                        .Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                        .build());
//Kotlin
mediaPlayer.setAudioAttributes(
            AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .build()
        )
 

Примечание: Добавьте разрешение на доступ в Интернет в manifest.xml файл

 <uses-permission android:name="android.permission.INTERNET" />
 

и последнее, но не менее важное: вам нужно дождаться воспроизведения музыки, потому что она воспроизводит звук с URL-адреса, поэтому это занимает время, а также зависит от скорости интернета пользователя