Skip to content

[ZH] 1.快速上手

jrfeng edited this page Oct 18, 2023 · 53 revisions

项目配置

  1. 将以下代码添加到项目根目录中的 build.gradle 文件中:
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  1. 将以下代码添加到模块的依赖中
dependencies {
    implementation 'com.github.jrfeng.snow:player:1.2'
}
  1. 申请权限:
<!-- 用于启动前台 Service -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Android 14(API Level 34) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

<!-- 用于后台播放 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

<!-- 可选:用于播放本地音乐 -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
                 android:maxSdkVersion="32" />

<!-- 可选:用于播放网络音乐 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

注意!从 Android 6.0(API Level 23) 开始,需要在运行时动态申请存储器访问权限:"android.permission.READ_EXTERNAL_STORAGE"

  1. 创建 PlayerService

创建一个类并让其继承 snow.player.PlayerService 类,并且使用 @PersistenceId 注解对其进行标注。你不需要重写这个类的任何方法。

例:

@PersistenceId("MyPlayerService")
public MyPlayerService extends PlayerService {
}

@PersistenceId 注解用于为当前 PlayerService 设置一个持久化 ID,该 ID 将用于 PlayerService 状态的持久化。如果你没有使用 @PersistenceId 注解设置持久化 ID,则持久化 ID 默认为你的 PlayerService 的完整类名(例如 snow.demo.MyPlayerService)。建议为你的 PlayerService 设置一个持久化 ID,这样即使重命名 PlayerService 也不会导致状态丢失。

  1. 注册 PlayerService
<service 
    android:name="snow.demo.MyPlayerService"
    android:exported="true"
    android:foregroundServiceType="mediaPlayback">
    <intent-filter>
        <action android:name="android.media.browse.MediaBrowserService" />
    </intent-filter>
</service>

<receiver android:name="androidx.media.session.MediaButtonReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

简单使用

  1. 连接到 PlayerService
// 创建一个 PlayerClient 对象
PlayerClient playerClient = PlayerClient.newInstance(context, MyPlayerService.class);

// 连接到 PlayerService
playerClient.connect(new PlayerClient.OnConnectCallback() {
    @Override
    public void onConnected(boolean success) {
        // DEBUG
        Log.d("App", "connect: " + success);
    }
});
  1. 创建一个播放列表

提示:下例中的播放链接可能已失效,如果已失效,建议开发者自行从其他地方获取播放链接并构建对应的 MusicItem 对象。

private Playlist createPlaylist() {
    MusicItem song1 = new MusicItem.Builder()
            .setTitle("太阳照常升起")
            .setArtist("久石让")
            .setAlbum("太阳照常升起 电影原声大碟")
            .setDuration(224013)
            .setUri("http://music.163.com/song/media/outer/url?id=441722")
            .setIconUri("http://p2.music.126.net/drqGdK7zgW7B7IFl4lWpoQ==/109951163369835547.jpg")
            .build();

    MusicItem song2 = new MusicItem.Builder()
            .setTitle("钢铁洪流进行曲")
            .setArtist("李旭昊")
            .setAlbum("国庆70周年阅兵BGM")
            .setDuration(186154)
            .setUri("http://music.163.com/song/media/outer/url?id=1394369908")
            .setIconUri("http://p2.music.126.net/KnC_YJjnRTNvCF82_2leCg==/109951164930615683.jpg")
            .build();

    MusicItem song3 = new MusicItem.Builder()
            .setTitle("国际歌-钢琴")
            .setArtist("曹伟健")
            .setAlbum("音迹")
            .setDuration(141369)
            .setUri("http://music.163.com/song/media/outer/url?id=1857796913")
            .build();

    MusicItem song4 = new MusicItem.Builder()
            .setTitle("我爱你中国[Forbid Seek]")
            .setDuration(136000)
            // cross-protocol redirects
            .setUri("https://music.163.com/song/media/outer/url?id=174451")
            .setIconUri("http://p2.music.126.net/x6pVwc6ysKZ9S01jYlYiAw==/97856534887060.jpg")
            // forbid seek
            .setForbidSeek(true)
            .build();

    return new Playlist.Builder()
            .append(song1)
            .append(song2)
            .append(song3)
            .append(song4)
            .build();
}
  1. 设置播放列表并播放音乐
// 创建播放列表
Playlist playlist = createPlaylist();

// 设置播放列表,并播放音乐
playerClient.setPlaylist(playlist, true);

End