音乐类模块支持搜索和控制的类型
背景音乐模块(0)
接口描述
HDLCommand.audioCtrl(AppliancesInfo info, int type)
info:需要控制设备的参数
type:需要控制功能命令参数
调用该接口,可以控制背景音乐模块,获取当前歌曲信息、播放/暂停、播放/停止、上一首、下一首、切换播放模式、获取下一列表、获取上一列表。
代码范例
    .......
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.GET_AUDIO_CURRRENT_INFO);//获取当前音乐信息。返回当前歌曲、所有信息。
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.GET_AUDIO_MODE);//获取当前音乐播放模式。仅返回单曲播放等播放模式。
    .......
    .......
    //播放或暂停
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_AUDIO_PLAYPAUSE);
    .......
    .......
    //播放或停止
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_AUDIO_PLAYSTOP);
    .......
    .......
    //上一首
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_PRE_SONG);
    .......
    .......
    //下一首
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_NEXT_SONG);
    .......
    .......
    //切换播放模式
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_AUDIO_MODE_UP);//播放模式+
    //HDLCommand.HDLaudioCtrl(CtrlAudioActivity.this,appliancesInfo,HDLAudio.SET_AUDIO_MODE_DOWN);//播放模式-
    .......
    .......
    //获取下一列表,当前音乐会停止播放
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_NEXT_LIST);
    .......
    .......
    //获取上一列表,当前音乐会停止播放
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_PRE_LIST);
    .......
接口描述
HDLCommand.audioCtrl(AppliancesInfo info, int type, int value)
调用该接口,可以控制背景音乐模块,获取当前播放列表、控制设备音量。
代码范例
    .......
    //获取当前播放列表,此方法如果在歌曲播放状态时调用则会导致歌曲停止播放,硬件设计如此
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.GET_AUDIO_LIST, curListNum);
    .......               
    .......
    //设置播放音量
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_AUDIO_VOL, 0);//音量最小:0。小于0,SDK不处理
    .......
接口描述
HDLCommand.audioCtrl(AppliancesInfo info, int type, int listId, int songId)
listId:当前列表号
songId:要播放的列表中歌曲对应的歌曲ID
调用该接口,可以控制背景音乐模块,选择指定播放的歌曲。
代码范例
    .......
    //设置播放音量
    HDLCommand.audioCtrl(appliancesInfo, HDLAudio.SET_CHOOSE_PLAY_SONG, curListNum, position);
    .......
查询状态回调事件监听
背景音乐模块查询、控制超时或成功,都会收到AudioInfoEvent订阅事件;
开发者可以在所需要获取状态回调的地方,订阅该事件;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)是否一致,从而判断该消息事件为当前设备查询状态返回的消息,进行下一步处理,不一致则过滤不处理。
根据返回的event.getType()类型,判断是什么类型状态返回。
例:getType()等于HDLAudio.CALLBACK_CURRENT_VOLUME 的话,为返回音量类型参数参数
输出打印:HDLLog.Log("当前音量值:" + event.getAudioInfoInt());
代码范例
```java
 /**
 * 音乐模块状态回调Event
 *
 * @param event
 */
 @Subscribe(threadMode = ThreadMode.MAIN)
 public void onAudioEventMain(AudioInfoEvent event) {
 //判断是否为本音乐模块的子网号,设备号
 if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
 && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
 ) {
 HDLLog.Log("onAudioEventMain: " + event.getType());
 switch (event.getType()) {
 case HDLAudio.CALLBACK_SONG_NAME_LIST:
 listString.clear();
 for (int i = 0; i < event.getSongNameList().size(); i++) {
 listString.add(event.getSongNameList().get(i));
 }
 adapter.notifyDataSetChanged();
 break;
 case HDLAudio.CALLBACK_CURRENT_VOLUME:
 HDLLog.Log("当前音量值:" + event.getAudioInfoInt());
 break;
 case HDLAudio.CALLBACK_AUDIO_LIST_NUM:
 int[] listNum = event.getAudioListInfo();
 curListNum = listNum[0];
 HDLLog.Log("当前列表号:" + listNum[0] + " 当前共有列表数:" + listNum[1]);
 if (isInit) {
 isInit = false;//此操作为仅初始化才请求获取当前音乐列表,厂商可以自行决定何时获取音乐列表
 HDLCommand.audioCtrl(appliancesInfo, HDLAudio.GET_AUDIO_LIST, curListNum);//获取当前播放列表,此方法如果在歌曲播放状态时调用则会导致歌曲停止播放,硬件设计如此
 }
 break;
 case HDLAudio.CALLBACK_CURRENT_LIST_NAME:
 HDLLog.Log("当前列表名:" + event.getAudioInfoStr());
 break;
 case HDLAudio.CALLBACK_CURRENT_SONG_NUM:
 int[] songNum = event.getAudioListInfo();
 HDLLog.Log("当前歌曲号:" + songNum[0] + " 当前共有歌曲数:" + songNum[1]);
 break;
 case HDLAudio.CALLBACK_CURRENT_SONG_NAME:
 HDLLog.Log("当前歌曲名:" + event.getAudioInfoStr());
 curSongNameTv.setText("当前歌曲名:" + event.getAudioInfoStr());
 break;
 case HDLAudio.CALLBACK_CURRENT_SONG_INFO:
 int[] songInfo = event.getAudioListInfo();
 //songInfo[0],songInfo[1]获得的值为秒,如songInfo[0]=250,即歌曲总时长为250秒。songInfo[2]获得的值为:1、2、3。1:停止,2:播放,3:暂停。
 String curStatus;
 switch (songInfo[2]) {
 case 1:
 curStatus = "停止";
 break;
 case 2:
 curStatus = "播放";
 break;
 case 3:
 curStatus = "暂停";
 break;
 default:
 curStatus = "未知";
 break;
 }
 HDLLog.Log("当前歌曲总时长:" + songInfo[0] + "秒 ,当前歌曲已播放时长:" + songInfo[1] + "秒, 当前歌曲状态:" + curStatus);
 curSongInfoTv.setText("当前歌曲总时长:" + songInfo[0] + "秒 ,当前歌曲已播放时长:" + songInfo[1] + "秒, 当前歌曲状态:" + curStatus);
 break;
 case HDLAudio.CALLBACK_CURRENT_MODE:
 String curMode;
 switch (event.getAudioInfoInt()) {
 case 1:
 curMode = "单曲播放";
 break;
 case 2:
 curMode = "单曲循环";
 break;
 case 3:
 curMode = "连续播放";
 break;
 case 4:
 curMode = "连播循环";
 break;
 default:
 curMode = "未知";
 break;
                }
                modeBtn.setText(curMode);
                break;
            default:
                break;
        }
    }
}
```