如何使用Java从Android流式传输音乐 - Android

时间:2017-10-16 19:23:01

标签: java android ios audio stream

我对Android开发和Android设备都很陌生,因此我不知道这里的工作原理。

我想创建一个应用程序,它会从我的网址流式传输音乐,并在我最小化应用程序后继续播放该歌曲。

我搜索了我的问题,但很多答案都是针对mp3歌曲或其他类型的,但我的网址来自直播电台,所以它不是一首歌。

我发现并且对我的问题有益的答案之一是this并使用此代码:

Uri myUri = Uri.parse("your url here");
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(myUri, "audio/*"); 
startActivity(intent);

这促使我选择一个音乐播放器。

有没有办法只按我的"播放"按钮并听到音乐?

在我的iOS应用程序中,我使用此代码,我可以在没有外部播放器的情况下随时启动和停止流媒体音乐:

func prepareToPlay() {

        let url = URL(string: "myUrl")

        playerItem = AVPlayerItem(url: url!)

        player = AVPlayer(playerItem: playerItem)

        player?.play()
}

提前致谢

修改

在评论和回答中建议我尝试用MPlayer播放后,我创建了一个函数,当我按下这样的按钮时我调用了它:

public void playM() {
    String url = "http://android.programmerguru.com/wp-content/uploads/2013/04/hosannatelugu.mp3";

    mPlayer = new MediaPlayer();
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mPlayer.setDataSource(url);
    } catch (IllegalArgumentException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (SecurityException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IllegalStateException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mPlayer.prepare();
    } catch (IllegalStateException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    }
    mPlayer.start();
}

但我得到一个错误(第四条消息),我在日志中看到了这个:

  

无法创建媒体播放器

     

在状态1中调用prepareAsync,mPlayer(0x0)

     

开始在状态1,mPlayer(0x0)

中调用      

错误(-38,0)

2 个答案:

答案 0 :(得分:2)

对ACTION标志的意图是在大多数情况下打开另一个应用程序。既然你不需要它。你想要自己的自定义播放器。因此,Android有针对此类场景的Media Player类。

创建它的实例并传递您的stream-URL。现在,设置数据源并在onBtnClickListener()之后调用prepare(),通过调用mp.start()启动音乐

Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();


P.S:捕获所有异常并确保清单文件中的PERMISSIONS

答案 1 :(得分:1)

Intent仅用于在活动/服务和系统之间发送一些数据。它不会播放音乐。除了对一些活动说什么,它什么都不做。您需要一种能够播放多媒体流的机制。您应该使用MediaPlayer课程在应用程序中播放多媒体。

这是一些教程,如何播放来自音频的音乐:http://programmerguru.com/android-tutorial/android-mediaplayer-example-play-from-internet/

相关问题