13. 找手机/设备

找手机: 接收到设备的命令后,通过播放手机的音频,从而使用户找到手机
找设备: SDK发送命令给设备后, 通过设备播放指定音频,从而让用户找到设备

Important

  1. 铃声播放最好是播放闹钟,其他音频播放,有可能因为手机静音而没有声音。

  2. 手机不要设置成静音模式

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) {
        //处理错误事件
    }
});