13. 找手机/设备
找手机: 接收到设备的命令后,通过播放手机的音频,从而使用户找到手机
找设备: SDK发送命令给设备后, 通过设备播放指定音频,从而让用户找到设备
Important
铃声播放最好是播放闹钟,其他音频播放,有可能因为手机静音而没有声音。
手机不要设置成静音模式
13.1. 找手机
//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//铃声管理器
final RingHandler mRingHandler = RingHandler.getInstance();
//注册手表事件回调
watchManager.registerOnWatchCallback(new OnWatchCallback() {
//监听设备主动推送的命令
@Override
public void onRcspCommand(BluetoothDevice device, CommandBase command) {
if (command.getId() == Command.CMD_SEARCH_DEVICE) { //处理查找设备命令
SearchDevCmd searchDevCmd = (SearchDevCmd) command;
SearchDevParam param = searchDevCmd.getParam();
if(param == null) return;
if (param.getOp() == RcspConstant.RING_OP_OPEN) { //铃声打开
//播放铃声
//type: 播放方式
//play timeout: 播放超时
mRingHandler.playAlarmRing(param.getType(), param.getTimeoutSec() * 1000);
isRingPlay = true;
} else { //铃声关闭
mRingHandler.stopAlarmRing();
isRingPlay = false;
}
//回复设备操作成功
searchDevCmd.setStatus(StateCode.STATUS_SUCCESS);
searchDevCmd.setParam(new SearchDevParam.SearchDevResultParam(0));
watchManager.sendCommandResponse(device, searchDevCmd, null);
}
}
});
13.2. 找设备
//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//构建查找设备命令
//op --- 查找设备
//timeout --- 超时时间
//ringWay --- 全部响铃
//player --- 设备播放
CommandBase searchDevCmd = CommandBuilder.buildSearchDevCmd(RcspConstant.SEARCH_TYPE_DEVICE, 60,
RcspConstant.RING_WAY_ALL, RcspConstant.RING_PLAYER_DEVICE);
watchManager.sendRcspCommand(watchManager.getConnectedDevice(), searchDevCmd, new RcspCommandCallback<SearchDevCmd>() {
@Override
public void onCommandResponse(BluetoothDevice device, SearchDevCmd cmd) {
if (cmd.getStatus() != StateCode.STATUS_SUCCESS) {
onErrCode(device, RcspErrorCode.buildJsonError(cmd.getId(), RcspErrorCode.ERR_RESPONSE_BAD_STATUS, cmd.getStatus(), null));
return;
}
SearchDevResponse response = cmd.getResponse();
if (null == response) {
onErrCode(device, new BaseError(RcspErrorCode.ERR_PARSE_DATA, RcspErrorCode.getErrorDesc(RcspErrorCode.ERR_PARSE_DATA)));
return;
}
if (response.getResult() == 0) {
//请求成功, 说明设备在响铃
} else {
onErrCode(device, RcspErrorCode.buildJsonError(cmd.getId(), RcspErrorCode.ERR_RESPONSE_BAD_RESULT, response.getResult(), null));
}
}
@Override
public void onErrCode(BluetoothDevice device, BaseError error) {
//处理错误事件
}
});
13.3. 停止查找
//WatchManager是WatchOpImpl的子类,须在1.3配置好sdk
final WatchManager watchManager = WatchManager.getInstance();
//构建停止查找设备命令
watchManager.sendRcspCommand(CommandBuilder.buildSearchDevCmd(RcspConstant.RING_OP_CLOSE, 0), new RcspCommandCallback<SearchDevCmd>() {
@Override
public void onCommandResponse(BluetoothDevice device, SearchDevCmd cmd) {
if (cmd.getStatus() != StateCode.STATUS_SUCCESS) {
onErrCode(device, RcspErrorCode.buildJsonError(cmd.getId(), RcspErrorCode.ERR_RESPONSE_BAD_STATUS, cmd.getStatus(), null));
return;
}
SearchDevResponse response = cmd.getResponse();
if (null == response) {
onErrCode(device, new BaseError(RcspErrorCode.ERR_PARSE_DATA, RcspErrorCode.getErrorDesc(RcspErrorCode.ERR_PARSE_DATA)));
return;
}
if (response.getResult() == 0) {
//请求成功, 说明设备已经停止响铃
} else {
onErrCode(device, RcspErrorCode.buildJsonError(cmd.getId(), RcspErrorCode.ERR_RESPONSE_BAD_RESULT, response.getResult(), null));
}
}
@Override
public void onErrCode(BluetoothDevice device, BaseError error) {
//处理错误事件
}
});