TuyaOS SDK Android 版

更新时间:2024-11-20 08:51:33下载pdf

TuyaOS SDK Andriod 版是基于 TuyaOS 技术体系按照物联网设备应用场景进行裁剪、定制而得,适用于任意一款按照涂鸦平台导入规范进行适配导入的安卓平台(支持符合 API 19 及以上级别的安卓版本)。

概述

TuyaOS 是涂鸦独创 IoT OS 操作系统级别的端云 SDK,提供了按照业务需求选择组件,定制 SDK 的能力,是涂鸦赋能开发者的利剑,具备轻量级、互联互通、安全传输、组件丰富、快速开发等关键能力,有效降低开发门槛、缩短开发周期,可广泛应用于智能屏幕设备、可穿戴设备、视频监控、中控网关、智能音箱、智能家电和智能门锁等智能家居设备。

Demo 使用方法

Demo 提供了获取激活码、激活设备、测试 DP点、展示状态日志等功能。 点击下载 Demo 安装包

注意: 配置 Demo 前请先配置 piduuidauthkey 参数 。

配置方式

根据 SDK 的安装方式提供不同的 Demo 配置方法。配置完成的界面如下:

TuyaOS SDK Android 版
  1. 自行编译 SDK.
    local.properties文件中增加如下代码。

    UUID="您的 UUID"  
    AUTHKEY="您的 Key"  
    PID="您的 PID"
    
  2. 通过 Demo 安装 SDK .

    1. 在配置界面进行配置。

      TuyaOS SDK Android 版
    2. 扫描配置二维码进行配置。

      TuyaOS SDK Android 版

      说明:通过二维码生成工具,将下方的 JSON 配置代码转换为配置二维码。

      {
      	"PID": "您的PID",
      	"UUID": "您的UUID",
      	"AUTHKEY": "您的AUTHKEY"
      }
      

接入方法

依赖

添加实现。

implementation 'com.tuya.smart:tuyasmart-iot_sdk:1.0.7'
implementation 'com.tencent.mars:mars-xlog:1.2.3'

在项目根目录 build.gradle 中添加仓库地址。

maven { url 'https://maven-other.tuya.com/repository/maven-releases/'}
maven { url 'https://maven-other.tuya.com/repository/maven-snapshots/'}

混淆

如果开启了混淆功能,在 proguard-rules.pro 文件中添加以下代码。

-keep class com.tuya.smartai.iot_sdk.** {*;}
-keep class com.tencent.mars.** {*;}

权限要求

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

初始化

IoTSDKManager ioTSDKManager = new IoTSDKManager(context);

/**
     * 初始化SDK (注意:一个 UUID 不能同时在多个设备上激活)
     * @param basePath  存储路径 示例:"/sdcard/tuya_iot/"
     * @param productId 产品 ID
     * @param uuid  用户 ID
     * @param authKey 认证 Key
     * @param version 固件版本号(OTA用)
     * @param mCallback SDK 回调方法
     * @return
     */
ioTSDKManager.initSDK(String basePath, String productId, String uuid, String authorKey, String version, IoTCallback mCallback);


public interface IoTCallback {

        /**
                 * DP 事件接收
                 * @param event
                 * 
                 * 事件值(event.value)
                 * 事件 ID(event.dpid)
                 * 事件类型(event.type)
                 * DPEvent.Type.PROP_BOOL
                 * DPEvent.Type.PROP_VALUE
                 * DPEvent.Type.PROP_STR
                 * DPEvent.Type.PROP_ENUM
                 * DPEvent.Type.PROP_RAW
                 */
        void onDpEvent(DPEvent event);

        //解绑设备回调 (请在此处重启APP进程,否则会影响二次配网)
        void onReset();

        //收到配网二维码短链(获取失败时为null)
        void onShorturl(String url);
        
        /**
         * MQTT状态变化
         * @param status IoTSDKManager.STATUS_OFFLINE 网络离线; 
         *               IoTSDKManager.STATUS_MQTT_OFFLINE 网络在线 MQTT 离线; 
         *               IoTSDKManager.STATUS_MQTT_ONLINE 网络在线 MQTT 在线
         */
        void onMQTTStatusChanged(int status);
        
        //设备激活
        void onActive();
        
        //设备初次激活
        void onFirstActive();
        
    }

销毁

//会进行广播注销等销毁操作
ioTSDKManager.destroy();

测试方法

测试阶段建议开启日志服务,SDK 的日志会自动保存在您传入的路径中。

注意 生产阶段建议去除日志服务。

/**
     * 开启本地日志服务
     * @param logPath 日志文件保存路径 示例:"/sdcard/tuya_log/"
     * @param cacheDays 日志文件缓存天数
     * @return
     */
Log.init(context, logPath, cacheDays);

//刷写日志文件,可以在需要的时候手动触发。isSync : true 为同步 flush,flush 结束后才会返回。 false 为异步 flush,不等待 flush 结束就返回。
Log.flush(isSync)

//销毁本地日志服务, 活动结束或应用退出时调用
Log.close();

API

//本地解绑 (异步操作,解绑成功会进入onReset回调)
IoTSDKManager.reset();

/**
     * 发送 DP 事件
         * 
     * @param id: DP ID
     * @param type: 类型 DPEvent.Type
     * DPEvent.Type.PROP_BOOL   boolean
     * DPEvent.Type.PROP_VALUE  int
     * DPEvent.Type.PROP_STR    string
     * DPEvent.Type.PROP_ENUM   int
     * DPEvent.Type.PROP_RAW    byte[]
     * @param val: 值
     * @return
     */
IoTSDKManager.sendDP(int id, int type, Object val)

/**
     * 发送多个 DP 事件
     *
     * @param events: 多个 DP 类型
     * @return
     */
IoTSDKManager.sendDP(DPEvent... events)

/**
     * 发送 DP 事件带时间戳
     *
     * @param id: DP ID
     * @param type: 类型 DPEvent.Type
     * @param val: 值
     * @param timestamp: 时间戳,单位为秒
     * @return
     */
IoTSDKManager.sendDPWithTimeStamp(int id, int type, Object val, int timestamp)


/**
     * 发送多个 DP 事件带时间戳(时间戳需要赋值在 DPEvent.timestamp)
     *
     * @param events: 多个 DP 类型
     * @return
     */
IoTSDKManager.sendDPWithTimeStamp(DPEvent... events)

/**
     * 发送 http 请求
     * @param apiName: 请求 API
     * @param apiVersion: 版本号
     * @param jsonMsg:   参数 JSON
     * @return
     */
IoTSDKManager.httpRequest(String apiName, String apiVersion, String jsonMsg)


//获取设备 ID
IoTSDKManager.getDeviceId()

//自定义实现网络状态监测,返回值为网络是否离线。SDK已提供默认实现,如无需要不必扩展此方法。
ioTSDKManager = new IoTSDKManager(this) {

            @Override
            protected boolean isOffline() {
                //实现自己的网络状态监测
                return super.isOffline();
            }
        }

OTA

说明:根据 ioTSDKManager.initSDK 传入的 version 对固件版本进行区分。更新固件包时需要修改固件版本号 version, 示例:1.2.3

支持设备端检测升级和 App 触发升级,升级流程如下:

  1. 设置回调。代码示例如下。

    ioTSDKManager.setUpgradeCallback(new UpgradeEventCallback() {
                @Override
                public void onUpgradeInfo(String version) {
                    //收到更新信息版本号:version
                    
                    //主动触发升级文件下载(收到更新回调后,可以触发)
                    ioTSDKManager.startUpgradeDownload();
                }
    
                @Override
                public void onUpgradeDownloadStart() {
                    //开始升级下载回调
                }
    
                @Override
                public void onUpgradeDownloadUpdate(int i) {
                    //下载进度回调 i%
                }
    
                @Override
                public void upgradeFileDownloadFinished(int result, String file) {
                    //下载完成回调,result == 0 表示成功,file 为升级文件压缩包路径(建议安装完成后清除)
                }
            });
    
  2. 以 ZIP 压缩格式上传新版本固件。

  3. 收到更新信息回调后,即可触发 ioTSDKManager.startUpgradeDownload 开始升级下载。