【问题标题】:Play SoundCloud Track播放 SoundCloud 曲目
【发布时间】:2013-03-21 21:13:48
【问题描述】:

我可以在我的 Android 应用中播放 SoundCloud 中的曲目吗?我正在尝试这段代码,但它不起作用:

String res = "https://api.soundcloud.com/tracks/84973999/stream?client_id=cd9d2e5604410d714e32642a4ec0eed4";

MediaPlayer mp = new MediaPlayer();
try {
        mp.setDataSource(res);
        mp.prepare();
        mp.start();
    } catch (IOException e) {

    }

【问题讨论】:

  • 您遇到错误了吗?
  • 我的 logcat:03-31 11:10:26.160:E/MediaPlayer(1780):错误 (1,-4) 03-31 11:10:26.710:I/MediaPlayer(1780):信息 (1,26)
  • -4 错误表示参数无效。
  • 还有别的办法吗?

标签: android soundcloud


【解决方案1】:

我在尝试从 Android 播放 Soundcloud 流时遇到了同样的问题。

为我解决的问题是将以下权限添加到我的 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" />

对我来说,这是一个面对面的时刻。这是我的媒体播放器实现。

对于我的媒体播放器,我有一个实现

的类
MediaPlayer.OnPreparedListener

在该类中,我使用以下代码设置 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();

在我的onPrepared 回调中,我只是开始播放流。

@Override
public void onPrepared(MediaPlayer mediaPlayer) {
    mMediaPlayer.start();
}

【讨论】:

  • 在 prepareAsync() 上崩溃; .非法状态异常。 ?
【解决方案2】:

在设置数据源之前尝试添加它

mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

在使用带有 URL 重定向的 MediaPlayer 时也出现了一些问题。您可能需要先解决重定向,然后相应地设置数据源

要获得重定向的 url,您可以使用 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();
        //...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多