全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
阿里云物联网套件

Android-SDK使用

更新时间:2018-01-17 17:47:45

1. 概要

本文描述如何使用Android-SDK,将Android设备接入物联网套件。Android SDK封装了 MQTT 建连、长连接维护 、基于MQTT协议的上下行请求的功能。

2. 快速接入

2.1 引入 SDK

2.1.1 仓库配置

在项目根目录的 build.gradle 基础配置文件中加入仓库地址

  1. allprojects {
  2. repositories {
  3. jcenter()
  4. // 阿里云仓库地址
  5. maven {
  6. url "http://maven.aliyun.com/nexus/content/repositories/releases/"
  7. }
  8. }
  9. }

2.1.2 引入 SDK :public-channel-core

在模块的 build.gradle 中,添加 public-channel-core 的依赖

  1. compile('com.aliyun.alink.linksdk:public-channel-core:0.2.1')

SDK 基于Paho mqttv3 Java开源库完成MQTT连接。自动间接依赖相关库:

  1. compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
  2. compile 'com.alibaba:fastjson:1.2.40'

2.2 获取三元组信息

MQTT连接物联网套件,需要三元组信息,即productKey、deviceName及deviceSecret。 需在阿里云物联网套件控制台获取。详情请参考使用准备

2.3 SDK API

2.3.1 SDK 日志开关

打开SDK内部日志输出开关。

  1. ALog.setLevel(ALog.LEVEL_DEBUG);

2.3.2 SDK 环境配置

环境配置需要在SDK初始化之前。SDK 支持自定义切换Host。

默认连接的地址为上海节点: ssl://[productKey].iot-as-mqtt.cn-shanghai.aliyuncs.com:1883

  1. MqttConfigure.HOST = "ssl://[productKey].iot-as-mqtt.us-west-1.aliyuncs.com:1883";//美西节点
  2. MqttConfigure.HOST = "ssl://[productKey].iot-as-mqtt.ap-southeast-1.aliyuncs.com:1883";//新加坡节点

2.3.3 SDK 初始化

拿三元组信息对SDK初始化,SDK 会进行 MQTT 建联。

  1. MqttInitParams initParams = new MqttInitParams(productKey,deviceName,deviceSecret);
  2. PersistentNet.getInstance().init(context,initParams);

2.3.4 添加通道状态变化监听

初始化 MQTT 建连结果的反馈及后续通道状态变化的监听可通过设置监听事件获取。

  1. PersistentEventDispatcher.getInstance().registerOnTunnelStateListener(channelStateListener,isUiSafe);// 注册监听
  2. PersistentEventDispatcher.getInstance().unregisterOnTunnelStateListener(connectionStateListener);//取消监听
  3. public interface IConnectionStateListener {
  4. void onConnectFail(String msg); //通道连接失败
  5. void onConnected(); // 通道已连接
  6. void onDisconnect(); // 通道断连
  7. }

2.3.5 上行请求接口

SDK 封装了上行Publish请求、订阅Subscribe、取消订阅unSubscribe等接口。上行请求需要在 SDK 初始化建联成功之后才能正常调用。

  1. /**
  2. * @param request 发送数据对象基类,需要根据不同的INet实现类传入不同的ARequest子类对象
  3. * 长连接传入:PersistentRequest对象
  4. * 短连接传:TransitoryRequest对象
  5. * @param listener 发送结果回调接口
  6. * @return AConnect对象,可以用于重试
  7. */
  8. ASend asyncSend(ARequest request, IOnCallListener listener);
  9. /**重新发送请求
  10. * @param connect 上次调用asyncSend返回值
  11. */
  12. void retry(ASend connect);
  13. /** 订阅下行消息,订阅后的消息统一在 IOnPushListener 中接收
  14. * @param topic
  15. * @param listener
  16. */
  17. void subscribe(String topic,IOnSubscribeListener listener);
  18. /** 取消订阅下行消息
  19. * @param topic
  20. * @param listener
  21. */
  22. void unSubscribe(String topic,IOnSubscribeListener listener);

调用示例:

  1. //Publish 请求
  2. MqttPublishRequest publishRequest = new MqttPublishRequest();
  3. publishRequest.isRPC = false;
  4. publishRequest.topic = "/productKey/deviceName/update";
  5. publishRequest.payloadObj = "content";
  6. PersistentNet.getInstance().asyncSend(publishRequest, new IOnCallListener() {
  7. @Override
  8. public void onSuccess(ARequest request, AResponse response) {
  9. ALog.d(TAG,"send , onSuccess");
  10. }
  11. @Override
  12. public void onFailed(ARequest request, AError error) {
  13. ALog.d(TAG,"send , onFailed");
  14. }
  15. @Override
  16. public boolean needUISafety() {
  17. return false;
  18. }
  19. });
  20. //订阅
  21. PersistentNet.getInstance().subscribe(topic, listener);
  22. //取消订阅
  23. PersistentNet.getInstance().unSubscribe(topic, listener);

2.3.6 下行数据监听

订阅Topic后,云端推送的下行消息监听。

  1. PersistentEventDispatcher.getInstance().registerOnPushListener(onPushListener,isUiSafe);// 注册监听
  2. PersistentEventDispatcher.getInstance().unregisterOnPushListener(onPushListener);//取消监听
  3. public interface IOnPushListener {
  4. /**下推消息回调接口
  5. * @param topic
  6. * @param data 下推的消息内容
  7. */
  8. void onCommand(String topic,String data);
  9. /**根据method过滤消息
  10. * @param topic : 本次下推消息的命令名称
  11. * @return : 若返回true,则onCommand被调用,返回false,则onCommand不会被调用
  12. */
  13. boolean shouldHandle(String topic);
  14. }
本文导读目录