# 设备发现

### 运行流程图

![](/files/-MEVoHZw-npM4IJsqaGq)

### 调用方法（discoverAppliance）

智能主机需要获取设备信息时,将会触发discoverAppliance方法

```java
@Override
public void discoverAppliance(String param) {
    //实例化一个设备对象
    Appliance appliance = new Appliance();
    //设置设备的唯一Id值
    appliance.setApplianceIdByInt(1);
    //设置设备名称
    appliance.setDeviceName(1+"灯");
    //设置设备类型
    appliance.setApplianceTypes(YzDevType.LIGHT);
    //设置支持的操作
    appliance.setActions(YzDevAction.turnOn,YzDevAction.turnOff);
    //添加到集合中
    virtualDevice.add(appliance);
    //获取设备完成后调用notifyHost 通知Action为 GET_DEVICE_SUCCESS,返回设备信息
    notifyHost(SdkAction.GET_DEVICE_SUCCESS, JSON.toJSONString(virtualDevice));
}
```

### Appliance设备对象

Appliance是设备对象,用于描述设备的信息,需要将不同的三方设备对象转换为此对象后再通过notifyHost通知主机更新数据

```java
public class Appliance  {
    //设备ID
    /**设备唯一ID*/
    private String applianceId;
    //设备具有的操作类型
    /**设备具有的操作类型*/
    private String[] actions;
    //设备的类型
    /**设备的类型*/
    private String[] applianceTypes;
    //设备名
    /**设备名*/
    private String deviceName;
    //厂商名
    /**厂商名*/
    private String manufacturerName;
    //如果具有自己的图标的话用该字段（可选,无值默认使用对应类型的本地图标）
    //图片URL链接
    /**如果具有自己的图标的话用该字段（可选,无值默认使用对应类型的本地图标）
     图片URL链接*/
    private String icon;
    //设备型号
    /**设备型号*/
    private String model;
    //设备型号名称
    /**设备型号名称*/
    private String modelName;
    //设备区域名称例如 （客厅,厨房）,如果此字段为空则可能赋予默认的值
    /**设备区域名称例如 （客厅,厨房）,如果此字段为空则可能赋予默认的值*/
    private String zone = "客厅";
    //设备楼层名称例如 （1楼,2楼）,如果此字段为空则可能赋予默认的值
    /**设备楼层名称例如 （1楼,2楼）,如果此字段为空则可能赋予默认的值*/
    private String floor = "1楼";
    //设备属性K - V
    /**设备属性K - V*/
    private JSONObject attributes;
    //补充字段
    /**补充字段*/
    private JSONObject additionalApplianceDetails;
    }
```

### 获取设备成功

由于设备加载时的时间长短不一,因此需要开发者在设备搜索完成后,自行发送通知获取设备成功的消息

SdkAction.[GET\_DEVICE\_SUCCESS ](/dev-link-host/android-link-sdk/action-shi-jian.md#get_device_success)\
获取成功

SdkAction.[GET\_DEVICE\_FAIL](/dev-link-host/android-link-sdk/action-shi-jian.md#get_device_fail)\
获取失败

数据：数组类型Appliance

```java
 notifyHost(SdkAction.GET_DEVICE_SUCCESS, JSON.toJSONString(virtualDevice));
```


---

# 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/dev-link-host/android-link-sdk/she-bei-fa-xian.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.
