如何让媒体播放器播放 URL link 的音乐?

How can I make the media player play the music with the URL link?

我制作了一个带有媒体播放器的应用程序有一段时间了。但是经过多次更新后,我发现下载应用程序所需的 space 变得非常大。我决定改变方法,让播放器通过互联网从 URL link 播放音乐,但我不知道如何管理它。 我相信我必须设置 mediaplayer.setDataSource,然后再放置 link。但在那之后它不适用于我的代码。有谁知道如何转换我的代码以在这种方法中工作?

我当前代码的一部分:

  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);
    });


}

请尝试使用以下代码通过 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 级或更高级别,则 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 的音频,所以这需要时间并且还取决于用户的互联网速度