更新记录

1.0.0(2023-01-09)

  • 实现QQ音乐在锁屏时动态刷新歌词的效果
  • 设置锁屏时歌曲名、歌手名、专辑名、封面图、实时播放进度等设置
  • 监听锁屏页面上一首、播放、暂停、下一首等按钮的事件监听
  • 对封面歌词实时动态刷新

平台兼容性

Android iOS
× 适用版本区间:11 - 15

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


功能

  • 实现QQ音乐在锁屏时动态刷新歌词的效果
  • 设置锁屏时歌曲名、歌手名、专辑名、封面图、实时播放进度等设置
  • 监听锁屏页面上一首、播放、暂停、下一首等按钮的事件监听
  • 对封面歌词实时动态刷新

集成步骤:

  1. 在项目manifest.json -》 App常用其它配置 -》 后台运行能力增加audio

API方法


var lockscreenui = uni.requireNativePlugin("wrs-lockscreenui");
  • 设置音乐播放地址

                lockscreenui.setPlayUrl({
                    url: musicInfo.url, // 音频播放地址
                    lrc: musicInfo.lrc, // 歌词地址,如果传入歌词地址,当调用lockscreenui.setNowPlayingInfo时,封面上会加入实时动态歌词,最好是本地下载好的歌词
                    value: 0.1 * 30, // 当前第几帧
                    timescale: 30, // 每秒钟多少帧.当前播放时间value/timescale
                    volume: 1, // 音量,0~1
                    muted: false, // 是否静音
                    autoPlay: autoPlay // 是否自动播放
                });
  • 设置锁屏控制页面需要监听的按钮事件

            var params = {};
            params.commands = [
                {
                    type: "previousTrackCommand" // 上一首
                },
                {
                    type: "playCommand" // 播放
                },
                {
                    type: "pauseCommand" // 暂停
                },
                {
                    type: "nextTrackCommand" // 下一首
                },
                {
                    type: "changePlaybackPositionCommand" // 拖动播放进度条
                }
            ];
            // 设置锁屏控制页面需要监听的按钮事件
            lockscreenui.setRemoteCommand(params);
  • 监听锁屏页按钮事件、歌曲播放进度等回调

            // 设置事件回调
            lockscreenui.setCallback((resp) => {
                var opt = resp.opt;
                var type = resp.type;
                switch (opt) {
                    // 锁屏页面按钮事件
                    case "commandEvent": {
                        switch (type) {
                            // 上一首
                            case "previousTrackCommand":
                                this.previous();
                                break;
                                // 播放
                            case "playCommand":
                                this.play();
                                break;
                                // 暂停
                            case "pauseCommand":
                                this.pause();
                                break;
                                // 下一首
                            case "nextTrackCommand":
                                this.next();
                                break;
                                // 进度条
                            case "changePlaybackPositionCommand":
                                var positionTime = resp.positionTime;
                                lockscreenui.seekToTime({
                                    positionTime: positionTime
                                });
                                break;
                            default:
                                break;
                        }
                    }
                    break;
                    // 播放进度事件
                case "periodicTimeObserverForInterval": {
                    lockscreenui.getScreenState((stateResp) => {
                        var screenLight = stateResp.screenLight;
                        var locked = stateResp.locked;
                        //点亮且锁屏时才更新锁屏界面UI,减少手机性能开销
                        if (screenLight == 0 && locked == 1) {
                            var musicInfo = this.sourceArray[this.index];
                            var currentTime = resp.currentTime;
                            var totalTime = resp.totalTime;
                            var rate = resp.rate;
                            // 设置锁屏界面UI
                            lockscreenui.setNowPlayingInfo({
                                title: musicInfo.title, // 歌曲名
                                artist: musicInfo.artist, // 歌手名
                                albumTitle: musicInfo.albumTitle, // 专辑名
                                playbackDuration: totalTime, // 歌曲时长 
                                elapsedPlaybackTime: currentTime, // 已经播放时长
                                rate: rate, // 播放速率
                                image: musicInfo.image, // 封面图
                                currentColor: "#2BCA7C", // 当前演唱歌词的颜色
                                normalColor: "#888888", // 普通歌词的颜色
                                currentFont: 20, // 当前演唱歌词的字体大小
                                normalFont: 16 // 普通歌词的字体大小
                            });
                        }
                    });
                }
                break;
                // 播放结束
                case "playbackFinished":
                {
                    this.showMsg("当前歌曲播放完");
                }
                break;
                default:
                    break;
                }
            });
  • 设置锁屏页内容

                            // 设置锁屏界面UI
                            lockscreenui.setNowPlayingInfo({
                                title: musicInfo.title, // 歌曲名
                                artist: musicInfo.artist, // 歌手名
                                albumTitle: musicInfo.albumTitle, // 专辑名
                                playbackDuration: totalTime, // 歌曲时长 
                                elapsedPlaybackTime: currentTime, // 已经播放时长
                                rate: rate, // 播放速率
                                image: musicInfo.image, // 封面图,当有设置歌词lrc地址时,封面会自动加入当前播放进度当歌词,以达到实时刷新歌词的效果
                                currentColor: "#2BCA7C", // 当前演唱歌词的颜色
                                normalColor: "#888888", // 普通歌词的颜色
                                currentFont: 20, // 当前演唱歌词的字体大小
                                normalFont: 16 // 普通歌词的字体大小
                            });
  • 快进播放

                        var positionTime = resp.positionTime;
                        lockscreenui.seekToTime({
                            positionTime: positionTime
                        });
  • 获取当前是否是锁屏状态和锁屏页面有没有高亮

lockscreenui.getScreenState((stateResp) => {
     // 0:表示锁屏界面高亮 1:表示锁屏界面变暗关闭 
    var screenLight = stateResp.screenLight;
    // 1:表示处于锁屏状态 其它:不是锁屏状态
    var locked = stateResp.locked;
});
  • 删除清空锁屏页面所有内容

                lockscreenui.restore((resp)=>{

                });
  • 释放资源

    lockscreenui.releaseResources();

支持定制,联系方式 QQ:252797991

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问