Play SoundCloud Track

前端 未结 2 1389
清歌不尽
清歌不尽 2021-01-01 08:02

can i play a track from SoundCloud in my android app? I\'m trying this code but it doesn\'t works:

String res = \"https://api.soundcloud.com/tracks/84973999         


        
相关标签:
2条回答
  • 2021-01-01 08:23

    trying adding this before you set data source

    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
    

    there have also been issues noted when using MediaPlayer with URL redirects. You may need to resolve the redirects first, then set your datasource accordingly

    To get the redirected url you can do soemthing like this using the soundcloud java-api-wrapper

    HttpResponse resp = wrapper.get(Request.to(res));
    if (resp.getStatusLine().getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) {
        final Header location = resp.getFirstHeader("Location");
        if (location != null && location.getValue() != null) {
            String redirectedStream = location.getValue();
            //...
        }
    }
    
    0 讨论(0)
  • 2021-01-01 08:34

    I was having the same problem trying to play a Soundcloud stream from Android.

    What fixed it for me was adding the following permissions to my AndroidManifest.xml

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

    For me it was a facepalm moment. Here is my mediaplayer implementation.

    For my mediaplayer I have a class that implements

    MediaPlayer.OnPreparedListener
    

    And in that class I use the following code to setup the MediaPlayer.

     mMediaPlayer = new MediaPlayer();
     mMediaPlayer.setOnPreparedListener(this);
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try{
            mMediaPlayer.setDataSource("http://api.soundcloud.com/tracks/7399237/stream?client_id=XXX");
        }catch (IllegalArgumentException e){
            e.printStackTrace();
    
        } catch (IOException e) {
            e.printStackTrace();
    
        }
        mMediaPlayer.prepareAsync();
    

    And in my onPrepared callback I simply start playing the stream.

    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        mMediaPlayer.start();
    }
    
    0 讨论(0)
提交回复
热议问题