Action disabled: source
语言:

安信可科技

AiCloud Android SDK 开发指导

AiCloud Android SDK 开发指导

v1.4.0

修订历史

版本 修订内容 修订人 审核人 修订日期
1.0.0 创建文档 白雪茹 2016.8.23
1.0.1 添加SDK所需权限 白雪茹 2016.8.24
1.0.2 修改使用权限 白雪茹 2016.8.25
1.0.3 添加智能连接,入网成功两个接口回调,修改错误信息 白雪茹 2016.8.30
1.0.4 合并用户绑定方法 白雪茹 2016.8.31
1.1.0 添加批量部署接口 白雪茹 2016.9.5
1.1.1 修改初始化控制信息接口,增加了用户名,密码两个参数 白雪茹 2016.9.6
1.1.2 修改MQTT订阅返回信息,将返回的topic修改为device_id 白雪茹 2016.9.7
1.2.0 添加局域网控制 白雪茹 2016.9.18
1.2.1 修改球泡灯数据点 白雪茹 2016.10.9
1.3.0 与ios统一方法名称,修改部署方法,取消单个部署,修改绑定方法,修改MQTT服务,现在获取设备列表和部署同时进行 白雪茹 2016.10.28
1.3.2 修改openMQTTServer()接口 白雪茹 2016.11.2
1.4.0 更新命名方式,以及无数API 白雪茹 2016.11.22

环境配置

使用sdk所需要添加的依赖

compile files('libs/javastruct-0.1.jar')
 
compile 'com.google.code.gson:gson:2.2.4'
 
compile 'com.koushikdutta.async:androidasync:2.1.8'
 
compile 'com.koushikdutta.ion:ion:2.1.8'
 
compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.0.2'

配置信息说明

static{
    //TODO:处理配置信息,配置信息根据厂商不同会发生改变
    CommConfig.NETWORK_URL="http://api.vcd.io:4568/v1/";
    CommConfig.ACCESS_SECRET="cafdeb099d45eee7e2faddea091fd609";
    CommConfig.ACCESS_KEY="8e0bb23839955bde1346b6e9395347ff";
    Commconfig.VENDOR_ID="2D8UbrFaRDDvWbhCaqQc8";
    Commconfig.APPNAME="SmartDevice"
}

配置信息建议写到Application类中

SDK所需权限说明

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
 
<!--网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 
<!-- 访问网络 -->
<uses-permission android:name="android.permission.INTERNET"/>
 
<!-- 网络通信 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 
<!-- 获取设备信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 
<!-- 读写sdcard,storage等等 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
 
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
 
<!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据?-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.providers.media.MediaProvider"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
 
<!-- 网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 
<!-- 访问网络 -->
<uses-permission android:name="android.permission.INTERNET"/>
 
<!-- 网络通信 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 
<!-- 获取设备信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 
<!-- 读写sdcard,storage等等 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
 
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
 
<!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.providers.media.MediaProvider"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

设备配置说明

球泡灯:连续开关三次球泡灯进入智能连接模式,此时灯泡表现为红色闪烁状态,连续开关四次球泡灯进入AP连接模式,此时球泡灯表现为颜色不停变换,连续开关十次球泡灯初始化完成并进入智能连接状态。

插座:长按开关按钮,小绿灯慢闪为智能连接状态,五秒钟后小驴灯中闪,此时为AP连接状态,长按10秒小绿灯变为超快闪,此时插座为初始化状态,松手后进入智能连接模式。

控制流程

API调用说明

本部分主要介绍SDK中API的使用

登录

获取UserManager实例

请求参数

参数 类型 必须 默认 说明

返回参数

参数 类型 说明
instance UserManger UserManger实体对象

方法调用说明

UserManager.getInstance();

返回实例

return instance;

短信验证

请求示例

参数 类型 必须 默认 说明
phone String 手机号码
1 int 重置密码获取验证码时传2,注册账号获取验证码传1
context Context 上下文对象
callback Callback 接口回调

返回参数

参数 类型 说明
user_code String 用户code,注册时会用到

方法调用示例

userManager.getMessage(phone, 1, this, new
Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
});

返回示例

{
    "success":true,
    "data":{
        "userCode":"sa4nUnfQisGTZH3EmE8JEE"
    }
}

注册

请求参数

参数 类型 必须 默认 说明
mobile String 手机号码
password String 登陆时密码
messageCode String 短信验证码
userCode String 获取短信验证码方法中返回
context Context 上下文对象
callback Callback 接口回调

返回参数

参数 类型 说明
userId String 用户id,用户的唯一身份标识

方法调用示例

UserManager.register(username, password, message_code, user_code, mobile,
    newCallback<JsonObject>(){
        @Override
        public void onCompleted(Exception e, JsonObject jsonObject){
        }
    }, this);

返回示例

{
    "success":true,
    "data":{
        "userId":"sa4nUnfQisGTZH3EmE8JEE"
    }
}

登录

请求参数

参数 类型 必须 默认 说明
username String 手机号码/用户昵称
password String 登录密码
context Context 上下文对象
callback Callback 接口回调

返回参数

参数 类型 说明
userToken String 用户token(2小时过期)
userId String 用户id

方法调用示例

UserManager.login(username, password, new Callback<JsonObject>()
{
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    },
this);

返回示例

{
    "success":true,
    "data":{
        "userToken":"350cfc21-cc96-4a59-8570-d4d1e40b1ebe",
        "userId":"sa4nUnfQisGTZH3EmE8JEE"
    }
}

修改密码

请求参数

参数 类型 必须 默认 说明
mobile String 手机号码/用户昵称
password String 新用户密码
messageCode String 短信验证码
userCode String 获取短信验证码时可返回
context Context 上下文对象
callback Callback 接口回调

返回参数

参数 类型 说明
true(false) boolean 修改密码是否成功

方法调用说明

userManager.resetPwd(mobile, password, messageCode, userCode, this, new
    Callback<JsonObject>(){
        @Override
        public void onCompleted(Exception e, JsonObject jsonObject){
            if(jsonObject!=null && jsonObject.toString().length()>0){
            }
        }
);

返回示例

{
    "success":true,
    "data":{
        "success":"true"
    }
}

获取用户信息

请求参数

参数 类型 必须 默认 说明
userId String 用户Id
context Context 上下文对象
callback Callback 接口回调

返回参数

参数 类型 说明
username String 用户昵称
mobile String 用户手机号码

方法调用示例

userManager.getUserInfo(userId, new
Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){}
}, getContext()
);

返回示例

{
    "success":true,
    "data":{
        "username":"葫芦小金刚",
        "mobile":"15723652874"
    }
}

修改用户信息

请求参数

参数 类型 必须 默认 说明
userId String 用户Id
username String 用户新昵称
context Context 上下文对象
callback Callback 接口回调

返回参数

{
    "success":true,
    "data":{
        "success":"true"
    }
}

获取设备

获取设备有两种,一种是获取用户已经绑定过的设备,一种是用户未绑定过的设备

获取绑定设备是从服务器上直接获得已经与用户建立过连接的设备,这些设备又分为两种,一种是在线设备,一种是离线设备。用户可以直接操控在线设,但不能操控离线设备,用户可以对所有设备进行解绑和更改用户信息的操作。

获取绑定设备

请求参数

参数 类型 必须 默认 说明
ssid String 设备要接入WiFi的名称
password String 设备要接入WiFi的密码
callback CallBack 请求成功的接口回调

返回参数

参数 类型 说明
deviceId String 设备id
devicePassword String 设备密码
productId String 产品id(判断设备类型)
status String 设备在线离线状态(“0”:离线,“1”:在线)
server String 设备服务器地址
deviceName String 设备名
logo String 设备logo
productName String 产品名

方法调用示例

userManager.getDeviceList(token, new Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
},this
);

返回示例

{
    "success":true,
    "data":[{
        "deviceId":"vkCEgh3L3c4oywmuFBgnXS",
        "devicePassword":"4a24f36fed73ca66a24e9fd0c3760ac0",
        "productId":"kc9dRAXr35PEA7PCZcR4z9",
        "status":"1",
        "server":"mqtt://221.122.108.89:1883",
        "deviceName":"设备名称"
        "logo":"http://doss.ai-thinker.com/devicexx/esp8266.png"
        "productName":"球泡灯"
    }]
}

解除绑定

请求参数

参数 类型 必须 默认 说明
user_token String 用户token,有过期时间,用户登录时获得
device_id string 设备唯一id,用户查询已绑定列表时可以获得
device_password string 设备密码,用户查询已绑定列表时可以获得
callback Callback 请求成功的接口回调
context Context 上下文对象

返回参数

参数 类型 说明
result String 解除设备是否成功

方法调用示例

userManager.unbindDevice(token, device_id, device_password, newCallback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
}, DeviceListActivity.this);

返回示例

{
    "success":true,
    "data":{
        "result":"SUCCESS"
    }
}

修改设备信息

请求参数

参数 类型 必须 默认 说明
deviceId String 设备唯一id,用户查询已绑定列表时可以获得
deviceName string 用户给设备的命名
callback Callback 修改成功接口回调

返回参数

参数 类型 说明
true boolean 解除设备是否成功

方法调用示例

userManager.updateDeviceInfo(bean.getDevice_id(), name, new Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
}, getContext());

返回示例

{
    "success":true,
    "data":{
        "success":"true"
    }
}

获取厂商信息

请求参数

参数 类型 必须 默认 说明
context Context 上下文对象
callback Callback 接口回调

返回参数

参数 类型 必须 默认 说明
productId String 产品Id
productName String 产品名称

方法调用示例

userManager.getVendorInfo(getContext(), new
Callback<JsonObject>() {
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject)
    {
        Log.e(TAG, "getVendor:"+e);
        Log.i(TAG,"getVendorInfo:" + jsonObject);
        saveVendorInfo(e, jsonObject);
    }
});

返回示例

{
 
    "success":true,
    "data":{
        "productVList":[
	{
	    "productId":"3G8pAXs2kppdLwHZHqTeWH"
	    "productName”:"AiBo"
	}]
    }
}

发现先未绑定设备

请求参数

参数 类型 必须 默认 说明
callback CallBack 请求成功的接口回调

返回参数

参数 类型 说明
productId String 产品Id
deviceId String 设备Id
mac String 设备mac
deviceHost String 设备Ip
devicePort String 设备端口

方法调用示例

deviceManager.discoverDevice(new 
Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
});

返回示例

{
    "productId":"kc9dRAXr35PEA7PCZcR4z9"",
    "deviceId":"JiEbsXMdn2W5uZtMm6fmr6",
    "mac":"001122334455",
    "deviceHost":"225.224.224.0",
    "devicePort":"8080"
}

绑定设备

参数 类型 必须 默认 说明
deviceManager DeviceManager DeviceManager的实体类
deviceHost String 设备IP,可在发现未绑定设备时获取
devicePort string 设备端口,可在发现未绑定设备时获取
user_token String 用户token,有过期时间,用户登陆时获取
callback CallBack 请求成功的接口回调
context Contex 上下文对象

返回参数

参数 类型 说明
true boolean 绑定是否成功

请求示例

new Thread(){
    @Override
    public void run(){
        super.run();
        userManager.bindingDevice(deviceManager, deviceHost, devicePort, token, new 
            Callback<JsonObject>(){
                @Override
                public void onCompleted(Exception e, JsonObject jsonObject){
                }
            }, DeviceListActivity.this);
        }
    }.start();

返回示例

{
    "success":true,
    "data":{
        "success":"true"
    }
}

控制设备

控制设备有两种请况,一种是通过广域网控制设备,一种是通过局域网控制设备

局域网控制设备

局域网控制设备的前提是必须开启TCP服务

打开TCP服务

请求参数

参数 类型 必须 默认 说明
device_ip String 硬件TCP?IP地址,可在发现设备时获得
device_id String 设备id,可以在获取绑定列表时获取
device_password String 设备密码,可以在获取绑定列表时获取
callback Callbackt TCP服务开启成功接口回调

返回参数

方法调用示例

deviceManager.openTCPServer(device_ip, deviceId, device_password,new 
Callback<JsonObject>() {
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
});

返回示例

关闭TCP服务

请求参数

返回参数

请求方法示例

deviceManager.closeTCPServer();

返回示例

发布控制信息

请求参数

参数 类型 必须 默认 说明
jsonObject JsonObject json字符串形式的参数
callback<JsonObject> Callback 控制数据发送成功接口回调(返回类型为json字符串)
Callback<byte[]> Callback 控制数据发送成功接口回调(返回类型为字节数组)

返回参数

根据不同控制信息设备返回控制参数有所不同,详见返回示例

方法调用示例(发送json字符串,返回json字符串和byte[])

deviceManager.tcpSendData(params, new
Callback<JsonObject>() {
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject){
    }
new Callback<byte[]>() {
    @Override
    public void onCompleted(Exception e, byte[] bytes){
    }
}
});

方法调用示例(发送byte[],返回byte[])

deviceManager.tcpSendData(params.toString().getBytes(), new 
Callback<byte[]>() {
    @Override
    public void onCompleted(Exception e, byte[] bytes) {
    }
});

方法调用示例(发送json,返回json)

deviceManager.tcpSendData(params, new 
Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject) {
    }
});

方法调用示例(发送byte[],返回jsonhebyte[])

deviceManager.tcpSendData(params.toString().getBytes(), new
Callback<JsonObject>(){
    @Override
    public void onCompleted(Exception e, JsonObject jsonObject) {
    }
},new
Callback<byte[]>() {
    @Override
    public void onCompleted(Exception e, byte[] bytes) {
    }
});

发送参数params示例

写球泡灯

{
    "i":4,
    "d":{
        "s":0,
        "m":1,
        "hue":0.5,
        "lit":0.5,
        "sat":0.5,
        "lum":0.5,
        "tem":0.5
    },
    "t":1464714257
    "device_id":"PGiHMkrgyxrUCuLgEfubUU"
}

读球泡灯

{
    "i":4,
    "d":{[
        "s":0,
        "m":1,
        "hue":0.5,
        "lit":0.5,
        "sat":0.5,
        "lum":0.5,
		"tem":0.5
    ]},
	"t":1464714257
}

返回参数示例

读(写)球泡灯

{
    "i":4,
    "d":{
		"s":0,
		"m":1,
		"hue":0.5,
		"lit":0.5,
		"sat":0.5,
		"lum":0.5,
		"tem":0.5
    },
	"t":1464714257
	"device_id":"PGiHMkrgyxrUCuLgEfubUU"
}

广域网控制设备

广域网控制设备的前提是必须先建立MQTT连接

设备部署

请求参数

参数 类型 必须 默认 说明
user_token String 用户token,有过期时间
callback Callback 部署成功接口回调
context? Context 上下文对象

返回参数

参数 类型 说明
server String 设备所连接服务器地址
username String (用户昵称)
password String 用户密码(加密后)
pubkey String ?
pubVersion String 硬件固件版本

方法调用说明

instance.batchDeploy(token, new
Callback<JsonObject>() {
	@Override
	public void onCompleted(Exception e, JsonObject jsonObject) {
	}
}, this);

返回说明

返回值示例(接口回掉返回json字符串)

{
	"success":true,
	"data":{
		"server_list":[{
				"server":"mqtt://s1.vcd.io:1883",
				"username":"tNb3ZgG9HLNiCEfNnushp6",
				"password":"dmUxHriiFrsAxJNTNd9Pz3",
				"pubkey":"",
				"pk_version":""
			}
		],
		"signature":"8e0bb23839955bde1346b6e9395347ff"
	}
}

建立MQTT连接

请求参数

参数 类型 必须 默认 说明
serverUrl String MQTT请求地址,用户部署时返回,用户部署,绑定设备,获得绑定设备中可以获得该地址。
username String 登录MQTT时的用户名,在部署时可获得
password String 登录MQTT时的用密码,在部署时可获得
user_id String 用户ID,用户登录时返回,用户登录时可以获得
uuid String 用户第一次登录设备时生成,详见特殊说明,uuid说明
callback(JsonObject) CallBack 请求成功的接口回调(返回值类型为JsonObject)
callback(byte[]) Callback 请求成功的接口回调(返回值类型为byte[])

返回参数

返回值为广域网控制设备时设备的反馈信息,详见局域网控制信息返回

方法调用示例

deviceManager.openMQTTServer(server,userName,userPassword,userId,uuid,new
DataCallback<String,{
	JsonObject>()
	@Override
	public void onCompleted(Exception e, String device_id, JsonObject jsonObject) {}
},new
DataCallback<String, byte[]>(){
	@Override
	public void onCompleted(Exception e, String s, byte[] bytes) {
	}
}
);

返回示例

见TCP控制返回示例

控制设备

请求参数

参数 类型 必须 默认 说明
serverUrl String MQTT请求地址,用户部署时返回,用户部署,绑定设备,获得绑定设备中可以获得该地址。
deviceId String 要控制设备的id
params String 发送的控制数据
context String 上下文对象

返回参数

方法调用示例(发送json)

deviceManager.publishMessage(serverUrl, deviceId, params, this);

方法调用示例(发送byte[])

deviceManager.publishMessage(serverUrl, deviceId, params.toString().getBytes(), this);

Parms示例

见TCP控制params示例

返回示例

免责声明和版权公告

本文中的信息,包括供参考的URL地址,如有变更,恕不另行通知。

档“按现状”提供,不负任何担保责任,包括对适销性、适于特定途或侵权性的任何担保,和任何提案、规格或样品在他处提到的任何担保。本档不负任何责任,包括使本档内信息产的侵犯任何专利权为的责任。本档在此未以禁反或其他式授予任何知识产权使许可,不管是明许可还是暗许可。

Wi-Fi联盟成员标志归Wi-Fi联盟所有。中提到的所有商标名称、商标和注册商标均属其各所有者的财产,特此声明。