# 设备管理

## 获取所有设备

### 介绍

登录成功后可以获取登录账号下面的所有设备

### 方法原型

```
/**
* 获取所有的设备
*
* @param phoneNumber 账号
* @param listener    注册结果监听
*/
public void requestAllDevice(@NonNull String phoneNumber, @NonNull final CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* phoneNumber：当前登录的账号
* listener：一个CloudUrlRequestListener对象

{% hint style="success" %}
请求成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个List\<com.youzhuan.mqttclient.device.bean.Device>,包含账号下面所有的音乐主机
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## com.youzhuan.mqttclient.device.bean.Device

### 源码

使用get方法获取内容

```
    private String deviceName;//设备名称
    private String deviceType;//设备类型
    private String deviceId;//设备ID
    private String callbackUrl;//设备callbackUrl
    private String topicUrl;//设备topicUrl
    private String sendTopic;//接收消息的Topic
    private String subscribeTopic;//发送消息的Topic
```

## 初始化SDK

### 获取MqttControlFactory对象

使用MqttControlFactory的静态方法getInstance()直接获取

```
public static MqttControlFactory getInstance(Context context);
```

### 初始化SDK

**获*****取所有设备成功后***，使用MqttControlFactory对象调用init();方法，初始化成功返回true

```
public boolean init();
```

### 获取MqttControl对象

可以通过该类直接控制设备

#### 获取对象

初始化SKD后可以直接获取该对象，由于机器可能连接在不同的服务器，需要音乐主机连接服务器的地址topicUrl，所以只能在获取到音乐主机对象（Device）后才能获取MqttControl对象

```
MqttContorl mqttContorl = MqttControlFactory.getInstance().getMqttContorl(device.getTopicUrl());
```

## 分享设备

### 介绍

通过此方法把一个设备分享给另外一个设备

### 方法原型

```
/**
* 分享设备
*
* @param phoneNumber 需要分享的账号
* @param listener    注册结果监听
*/
public void requestShareDevice(@NonNull String phoneNumber, final @NonNull CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* **phoneNumber：需要分享的账号**
* **listener：**&#x4E00;个CloudUrlRequestListener对象

{% hint style="success" %}
分享成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个ShareDeviceBean的Java Bean对象
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 删除设备

### 介绍

通过这个方法可以把已经绑定的设备，取消绑定当前账号，让其他账号绑定

### 方法原型

```
 /**
 * 删除设备
 *
 * @param phoneNumber 登录的账号
 * @param sid         分享的分享id
 * @param deviceId    设备的ID
 * @param listener    监听事件
 */
public void requestRemoveDevice(@NonNull String phoneNumber, @NonNull String sid, @NonNull String deviceId, @NonNull final CloudUrlRequestListener listener)
```

### 调用

使用CloudUrlRequest对象调用

### 参数介绍

* **phoneNumber：当前登录的账号**
* **sid：分享设备的ID**
* **deviceId：音乐主机的设备ID**
* **listener：一个实现**CloudUrlRequestListener的对象，**监听删除账号是否成功**

{% hint style="success" %}
分享成功调用CloudUrlRequestListener对象的onResponse(T response);方法，参数是一个RemoveDeviceBean的Java Bean对象
{% endhint %}

{% hint style="warning" %}
请求失败调用CloudUrlRequestListener对象的onFailure(int errType);方法，参数请求错误的错误码，详情请参考错误码
{% endhint %}

## 绑定设备

### 介绍

通过此方法可以把，一台没有绑定的机器绑定到账号，需要扫描机器段二维码的信息

### 方法原型

```
/**
* 绑定设备
* @param scanDeviceBean   机器端二维码的信息
* @param bindDeviceStatus 绑定设备状态监听器
*/
public void bindDevice(@NonNull final ScanDeviceBean scanDeviceBean,@NonNull final BindDeviceStatus bindDeviceStatus)
```

### 调用

使用ScanDeviceBean中的topicUrl地址获取MqttControl对象，通过MqttControl对象调用bindDevice方法

### 参数介绍

* scanDeviceBean：机器端二维码信息的Java bean对象，扫描二维码后使用该对象解析
* bindDeviceStatus：一个实现BindDeviceStatus的对象，作为回调对象

{% hint style="success" %}
绑定成功后会回调bindDeviceStatus对象的bindSuccess();方法
{% endhint %}

{% hint style="warning" %}
绑定失败后会回调bindDeviceStatus对象的bindFailure();方法
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.youzhuan.net/ctrl-host/yun-dui-jie/jie-ru-zhi-nan/huo-qu-she-bei.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
