4. 设备音乐控制功能

Important

  1. 接口需要设备处于【音乐模式】才能生效

  2. 判断设备是否支持【音乐模式】

public boolean isSupportDeviceMusicMode() {
    //获取RCSPController对象
    RCSPController controller = RCSPController.getInstance();
    //获取当前操作设备
    BluetoothDevice usingDevice = controller.getUsingDevice();
    if (null == usingDevice) return false;
    DeviceInfo deviceInfo = controller.getDeviceInfo(usingDevice);
    if (null == deviceInfo) return false; //设备未初始化
    return deviceInfo.isDevMusicEnable();
}
  1. 判断设备是否处于【音乐模式】

public boolean isDeviceInDeviceMusicMode() {
    //获取RCSPController对象
    RCSPController controller = RCSPController.getInstance();
    //获取当前操作设备
    BluetoothDevice usingDevice = controller.getUsingDevice();
    if (null == usingDevice) return false;
    DeviceInfo deviceInfo = controller.getDeviceInfo(usingDevice);
    if (null == deviceInfo) return false; //设备未初始化
    return deviceInfo.getCurFunction() == AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC;
}
  1. 查询当前设备模式

4.1. 获取设备音乐信息

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 设备音乐模式
mask : – 标识功能码

掩码位

说明

Bit0

音乐播放状态

Bit1

音乐名称信息

Bit2

EQ信息

Bit3

文件类型

Bit4

播放模式

命令构造

CommandBase getMusicInfoCmd = CommandBuilder.buildGetMusicSysInfoCmd(0x07);

代码示例参考 查询设备系统信息

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {

    @Override
    public void onMusicNameChange(BluetoothDevice device, MusicNameInfo nameInfo) {
        //此处将回调音乐名信息
    }

    @Override
    public void onMusicStatusChange(BluetoothDevice device, MusicStatusInfo statusInfo) {
        //此处将回调音乐播放状态
    }

    @Override
    public void onPlayModeChange(BluetoothDevice device, PlayModeInfo playModeInfo) {
        //此处将回调播放模式信息
    }
});
//执行获取设备音乐信息功能并等待结果回调
controller.getDeviceMusicInfo(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onMusicNameChange、
        // BTRcspEventCallback#onMusicStatusChange、BTRcspEventCallback#onPlayModeChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

4.1.1. MusicNameInfo

音乐名称信息

public class MusicNameInfo {
    private int cluster;  //簇号 -- 用于定位文件路径
    private String name;  //音乐名
}

4.1.2. MusicStatusInfo

音乐状态信息

public class MusicStatusInfo {
    private boolean isPlay;  //是否播放
    private int currentTime; //当前播放时间(单位: 毫秒)
    private int totalTime; //时间总长(单位: 毫秒)
    private int currentDev; //设备句柄
}

4.1.3. PlayModeInfo

播放模式信息

public class PlayModeInfo {
     private int playMode; //播放模式
}

4.1.4. 播放模式对照表

数值

模式名称

0

无效模式

1

全部循环

2

设备循环

3

单曲循环

4

随机播放

5

文件夹循环

4.2. 获取设备音乐播放状态

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 设备音乐模式
mask : 0x01 << AttrAndFunCode.SYS_INFO_ATTR_MUSIC_STATUS_INFO – 标识音乐播放状态

命令构造

CommandBase getMusicPlaybackStatusCmd = CommandBuilder.buildGetMusicStatusInfoCmd();

代码示例参考 查询设备系统信息

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {

    @Override
    public void onMusicStatusChange(BluetoothDevice device, MusicStatusInfo statusInfo) {
        //此处将回调音乐播放状态
    }
});
//执行获取设备音乐播放状态功能并等待结果回调
controller.getDeviceMusicStatusInfo(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onMusicStatusChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

Note

音乐播放状态, MusicStatusInfo

4.3. 获取支持的播放格式

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC – 公共属性
mask : 0x01 << AttrAndFunCode.SYS_INFO_ATTR_FILE_TYPE – 标识支持的文件格式

命令构造

CommandBase getBrowseFileTypeCmd = CommandBuilder.buildGetBrowseFileTypeCmd();

代码示例参考 查询设备系统信息

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {

    @Override
    public void onFileFormatChange(BluetoothDevice device, String fileFormat) {
        //此处将回调支持播放文件格式
    }
});
//执行获取支持播放格式功能并等待结果回调
controller.getPlayFileFormat(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onFileFormatChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

4.4. 音乐播放或者暂停

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 音乐模式
flag : AttrAndFunCode.FUNCTION_MUSIC_CMD_PLAY_OR_PAUSE
extend : NULL

命令构造

CommandBase musicPlayOrPauseCmd = CommandBuilder.buildPlayOrPauseCmd();

代码示例参考 设置功能

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//执行音乐播放或暂停功能并等待结果回调
controller.musicPlayOrPause(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

4.5. 播放上一曲

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 音乐模式
flag : AttrAndFunCode.FUNCTION_MUSIC_CMD_PLAY_PREV
extend : NULL

命令构造

CommandBase musicPlayPrevCmd = CommandBuilder.buildPlayPrevCmd();

代码示例参考 设置功能

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//执行播放上一曲功能并等待结果回调
controller.musicPlayPrev(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

4.6. 播放下一曲

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 音乐模式
flag : AttrAndFunCode.FUNCTION_MUSIC_CMD_PLAY_NEXT
extend : NULL

命令构造

CommandBase musicPlayNextCmd = CommandBuilder.buildPlayNextCmd();

代码示例参考 设置功能

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//执行播放下一曲功能并等待结果回调
controller.musicPlayNext(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

4.7. 切换下一个播放模式

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 音乐模式
flag : AttrAndFunCode.FUNCTION_MUSIC_CMD_NEXT_PLAYMODE
extend : NULL

命令构造

CommandBase musicNextPlaymodeCmd = CommandBuilder.buildNextPlaymodeCmd();

代码示例参考 设置功能

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//执行切换下一个播放模式功能并等待结果回调
controller.musicSwitchNextPlayMode(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

4.8. 跳转到指定时间

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC – 音乐模式
flag : AttrAndFunCode.FUNCTION_MUSIC_CMD_FAST_FORWARD or FUNCTION_MUSIC_CMD_RETREAT_QUICKLY
extend : 指定时间(2Bytes)

命令构造

int orientation = Constants.SEEK_ORIENTATION_BACK;//跳转方向
short time = 1234; //跳转时间戳
CommandBase command = orientation == Constants.SEEK_ORIENTATION_BACK ?
   CommandBuilder.buildFastForwardCmd(time) : CommandBuilder.buildRetreatQuicklyCmd(time);

代码示例参考 设置功能

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
int orientation = Constants.SEEK_ORIENTATION_FORWARD;
//orientation : Constants.SEEK_ORIENTATION_FORWARD - 往前,Constants.SEEK_ORIENTATION_BACK - 往后
short time = 3000;
//time : 时间戳
//执行跳转到指定时间戳功能并等待结果回调
controller.musicSeekToProgress(controller.getUsingDevice(), orientation, time, new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});