收藏官网首页
查看: 18891|回复: 7

[问答] 下载的 机智云插座 安卓源码导出的App怎么登陆不了。。

10

主题

39

帖子

339

积分

中级会员

Rank: 3Rank: 3

积分
339
跳转到指定楼层
楼主
发表于 2016-8-8 09:13:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
下载的 机智云插座 安卓源码只修改了三个参数: APPID、 PRODUCT_KEY、APP_SECRET,导出的App登陆失败,是什么原因啊?用户名和密码肯定对。。。


3

主题

23

帖子

139

积分

注册会员

Rank: 2

积分
139
来自 4#
发表于 2016-8-9 10:02:15 | 只看该作者
机智云插座 安卓源码只修改了三个参数: APPID、 PRODUCT_KEY、APP_SECRET,导出的App登陆失败,是什么原因啊?
对于这种情况,建议你第一步先用虚拟设备调试,一步步缩小问题的范围, 手机与云端,手机与硬件,
既然你想测试机智云插座,你需要新建一个人设备,添加数据点时,使用推荐的机智云插座数据点,生成APPID、 PRODUCT_KEY、APP_SECRET,下载新设备的SDK更新源码里面lib下需要 更新的内容,修改APPID、 PRODUCT_KEY、APP_SECRET,修改成功后编译下载,不建议直接使用设备,因为设备有时是数据点数据类型存在问题,那么我们先使用虚拟设备调试,这样我们首先可以很方便的查找APP的问题,一般源码为机智云宠物屋,里面需要修改自己想要的控制命令,这时你需要参考自动生成的APP保留相关数据点,如果不进行修改的话,处出现当进入控制界面后它又会退到查找设备里,让你重新登陆,

34

主题

896

帖子

2274

积分

超级版主

Rank: 8Rank: 8

积分
2274
沙发
发表于 2016-8-8 09:54:02 | 只看该作者
你再重新注册一遍?

10

主题

39

帖子

339

积分

中级会员

Rank: 3Rank: 3

积分
339
板凳
 楼主| 发表于 2016-8-8 10:10:10 | 只看该作者
boboP 发表于 2016-8-8 09:54
你再重新注册一遍?

换一部手机就可以了。。。

10

主题

39

帖子

339

积分

中级会员

Rank: 3Rank: 3

积分
339
5#
 楼主| 发表于 2016-8-9 10:30:10 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发
北影狂刀 发表于 2016-8-9 10:02
机智云插座 安卓源码只修改了三个参数: APPID、 PRODUCT_KEY、APP_SECRET,导出的App登陆失败,是什么原因 ...

多谢指导,我用虚拟设备试了一下,也有通讯了,做为一个菜鸟已经满足了

6

主题

17

帖子

118

积分

注册会员

Rank: 2

积分
118
6#
发表于 2016-8-11 09:51:40 | 只看该作者
桂七 发表于 2016-8-9 10:30
多谢指导,我用虚拟设备试了一下,也有通讯了,做为一个菜鸟已经满足了 ...

能看一下你的虚拟机怎么设置的么,我的设置之后总是能安装打不开,总是报错。球联系方式。

10

主题

39

帖子

339

积分

中级会员

Rank: 3Rank: 3

积分
339
7#
 楼主| 发表于 2016-8-11 16:34:52 | 只看该作者
longy 发表于 2016-8-11 09:51
能看一下你的虚拟机怎么设置的么,我的设置之后总是能安装打不开,总是报错。球联系方式。 ...

我用手机扫虚拟机的二维码就可以了 这个我也不太懂哦     QQ:707083746

3

主题

23

帖子

139

积分

注册会员

Rank: 2

积分
139
8#
发表于 2016-9-18 11:44:19 | 只看该作者

SDK流程简介
2.1.        通用流程图

2.2.        关键点说明
•SDK已经封装了所有的用户、配置、发现、连接、控制的过程,开发者使用这些API可以完成上述流程中的功能开发,不需要再自行实现通讯协议。


•SDK采取回调的工作方式,所以必须设置必要的监听,比如通用监听和设备监听,具体请参见流程详解。SDK在主线程中给APP回调。


•SDK支持APP在Activity之间以及在Activity和Service之间传递对象。





1、如果是在activity之间传递对象的话可以用intent来传递

(传递)


01.Intent intent = new Intent(Context, A.class);

02.Bundle bundle = new Bundle();

03.bundle.putParcelable(“参数名”, 设备类对象);

04.intent.putExtras(bundle);

05.startActivity(intent);
复制代码
(接收)


01.Intent intent = getIntent();

02.intent.getParcelableExtra("参数名");
复制代码

2、在activity和service之间传递对象可以通过广播来传递数据,由一方发送数据另一方接收。


(注册广播)


01.IntentFilter filter = new IntentFilter();//创建IntentFilter对象

02.//注册一个广播,用于接收Activity传送过来的命令,控制Service的行为,如:发送数据,停止服务等

03.filter.addAction("AAAAAAA");

04.//注册Broadcast Receiver

05.registerReceiver(cmdReceiver, filter);  s
复制代码
(发送广播)


01.Intent intent = new Intent();  

02.intent.setAction("AAAAAAA");  

03.Bundle bundle = new Bundle();   

04.bundle.putParcelable(“参数名”,  设备类对象);

05.intent.putExtras(bundle);

06.sendOrderedBroadcast(intent, null);
复制代码

3、另外一种,是在Activity中通过bindService获取到Service对象,直接调用Service方法获取想要的设备对象

2.3.        混淆打包配置
如果您的项目使用了Proguard混淆打包,为了避免SDK被二次混淆导致无法正常使用SDK,请务必在 proguard-project.txt中添加以下代码:


01.-libraryjars libs/GizWifiSDK.jar

02.-dontwarn com.gizwits.**

03.-keep class com.gizwits.**{

04.    *;

05.}
复制代码
并在project.properties中指向Android混淆文件:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt













点评回复 支持  反对   
使用道具 举报


.
  





boboP







查看详细资料









20
主题

208
帖子
286
积分

超级版主

Rank: 8Rank: 8
积分286..发消息
.
板凳  



  楼主| 发表于 2016-8-8 11:29:09 | 只看该作者




3.1.        SDK初始化部分
3.1.1.        初始化部分流程图

3.1.2.        配置AndroidManifest.xml
请将下面权限配置代码复制到 AndroidManifest.xml 文件中:


01.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

02.<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

03.<uses-permission android:name="android.permission.READ_PHONE_STATE" />

04.<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

05.<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

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

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

08.<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

09.<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
复制代码
权限说明:
[td]
权限 用途

ACCESS_NETWORK_STATE

允许程序访问有关GSM网络信息


ACCESS_WIFI_STATE

允许程序访问WiFI网络状态信息


READ_PHONE_STATE

允许程序访问手机状态信息


ACCESS_COARSE_LOCATION

允许程序访问CellID或WiFi热点来获取粗略的位置


ACCESS_FINE_LOCATION

允许程序访问精良位置(如GPRS)


WRITE_EXTERNAL_STORAGE

允许程序写入外部SD卡


INTERNET

允许程序打开网络接口


CHANGE_WIFI_STATE

允许程序改变WiFi连接状态


CHANGE_WIFI_MULTICAST_STATE

允许程序改变WiFi多播状态

3.1.3.        注册SDK通用**
注册SDK通用**是为了能让APP收到来自GizWifiSDK类的响应事件,包含了注册、登录、配置设备、绑定设备等回调接口。该**是SDK使用中十分重要的一个**,与GizWifiSDK类相关的操作都会在这里会回调。如果没有正确注册通用**,将无法正常使用SDK。注册监听时,APP可以根据自己的需求实现回调接口。建议两种设置方式:

1、在每一个使用到的Activity中都实例化一次**并注册一次,且只实现需要的回调接口。该种方式比较灵活,可在service中使用。但要注意必须每次打开activity都监听一次, 且无法多个Activity同时收到回调。

【示例代码】


01.// 实例化**

02.GizWifiSDKListener mListener = new GizWifiSDKListener() {

03.

04.// 实现手机号注册用户回调

05.    @Override

06.    public void didRegisterUser(GizWifiErrorCode result, String uid, String token){

07.            if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

08.                // 注册成功,处理注册成功的逻辑

09.            } else {

10.                // 注册失败,处理注册失败的逻辑

11.            }

12.    }

13.};

14.

15.public void onCreate() {

16.    super.onCreate();

17.

18.    // 注册**

19.    GizWifiSDK.sharedInstance().setListener(mListener);

20.    // 调用SDK的手机号注册接口

21.    GizWifiSDK.sharedInstance().registerUser("HelloGizwits", "12345678");

22.}
复制代码
2、在一个基类中实例化一次**,并把回调抛出,子类继承基类,这就不需要每个子类都实例化一次**。该种方式通过继承的方式,可以多个Activity都收到回调。但该种方式无法在Service中使用。如无特别说明,文档中的范例都是使用该方法注册**。

【示例代码】


01.// 创建基类,在基类中实例化和注册**

02.public class BaseActivity extends Activity {

03.    private GizWifiSDKListener mListener = new GizWifiSDKListener() {

04.        @Override

05.        public void didRegisterUser(GizWifiErrorCode result, String uid, String token) {

06.                BaseActivity.this.didRegisterUser(result, uid, token);

07.        }

08.    };

09.

10.    public void didRegisterUser(GizWifiErrorCode result, String uid, String token){

11.        // 实现逻辑

12.    }

13.

14.    @Override

15.    protected void onCreate(Bundle savedInstanceState) {

16.        super.onCreate(savedInstanceState);

17.

18.        //每次启动activity都要注册一次sdk**,保证sdk状态能正确回调

19.        GizWifiSDK.sharedInstance().setListener(mListener);

20.    }

21.}

22.

23.//子类继承基类,实现基类的回调接口。

24.public class TestActivity extends BaseActivity {

25.    protected void onCreate(android.os.Bundle savedInstanceState) {

26.    //调用父类方法

27.        super.onCreate(savedInstanceState);

28.        //调用用户注册方法

29.        GizWifiSDK.sharedInstance().registerUser ("your_phone_number", "your_ password", “your_verify_code”, GizUserAccountType.GizUserPhone);

30.    }

31.

32.    @Override

33.    public void didRegisterUser(GizWifiErrorCode result, String uid,  String token) {

34.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

35.            // 注册成功

36.        } else {

37.            // 注册失败

38.        }

39.    }

40.}
复制代码3.1.4.        初始化 sdk
SDK启动前,任何功能都是无法正常使用的。SDK启动时,会进行SDK初始化,并自动发现当前局域网设备。SDK将通过通用监听,上报已发现的设备以及相应的事件。APP可以先设置SDK的通用监听,再启动SDK,以便处理这些事件通知。

SDK启动时需要指定应用程序的AppID,开发者需要先在机智云网站上为自己的APP申请一个AppID,请在应用的Application或者第一个启动的Activity的onCreate中调用该方法指定应用的APPID。该方法只需要调用一次。

SDK的日志可以帮助开发者发现APP运行时发生的问题,SDK默认将所有日志信息输出到调试终端和日志文件中。如果手机有SD卡,则日志文件会保存在SD卡上,如果没有SD卡,就只保存在应用程序路径下。SD卡上的日志文件目录为手机SD卡路径下的app_package_name/GizWifiSDK/GizSDKLog。APP如果不希望在调试终端输出日志,可以通过日志级别设置接口,把日志输出级别修改为GizLogPrintNone。

【示例代码】


01.public void onCreate() {

02.    super.onCreate();

03.    GizWifiSDK.sharedInstance().setListener(mListener);

04.    GizWifiSDK.sharedInstance().startWithAppID(getApplicationContext(), "your_app_id");

05.

06.    GizWifiSDKListener mListener = new GizWifiSDKListener() {

07.        @Override

08.        public void didNotifyEvent(GizEventType eventType, Object eventSource, GizWifiErrorCode eventID, String eventMessage) {

09.            if (eventType == GizEventType.GizEventSDK) {

10.            // SDK的事件通知

11.                Log.i("GizWifiSDK", "SDK event happened: " + eventID + ", " + eventMessage);

12.            } else if (eventType == GizEventType.GizEventDevice) {

13.                // 设备连接断开时可能产生的通知

14.                GizWifiDevice mDevice = (GizWifiDevice)eventSource;

15.                Log.i("GizWifiSDK", "device mac: " + mDevice.getMacAddress() + " disconnect caused by eventID: " + eventID + ", eventMessage: " + eventMessage);

16.            } else if (eventType == GizEventType.GizEventM2MService) {

17.                // M2M服务返回的异常通知

18.                Log.i("GizWifiSDK", "M2M domain " + (String)eventSource + " exception happened, eventID: " + eventID + ", eventMessage: " + eventMessage);

19.            } else if (eventType == GizEventType.GizEventToken) {

20.                // token失效通知

21.                Log.i("GizWifiSDK", "token " + (String)eventSource + " expired: " + eventMessage);

22.            }

23.        }

24.    };

25.}
复制代码










点评回复 支持  反对   
使用道具 举报


.
  





boboP







查看详细资料









20
主题

208
帖子
286
积分

超级版主

Rank: 8Rank: 8
积分286..发消息
.
地板  



  楼主| 发表于 2016-8-8 11:37:18 | 只看该作者




3.2.        用户部分
机智云的用户系统包含了用户的注册、登录、重置密码、修改个人信息等功能,机智云以APPID区分用户系统,不同APPID的用户系统相互独立。更换APPID后,需要重新注册用户。 以下流程中涉及到的**注册方法是用子类继承基类的方式实现的。
3.2.1.        用户部分主要流程图
用户的注册方式有多种,比如手机号、普通用户名、邮箱等,APP可以根据需要采取不同的方式。其他流程比如登录、密码修改、个人信息修改等部分,请直接阅读下面的流程文档。
3.2.2.        用户注册
机智云提供三种用户注册方式:手机注册、普通用户注册、邮箱注册。
3.2.2.1.        注册手机用户
通过手机注册账号,需要一个有效的手机号。注册时需要两步操作:获取短信验证码、用短信验证码注册用户。

第一步:APP获取短信验证码时,SDK向云端发送短信验证码请求,如果请求成功,云端会给手机发送短信验证码。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().requestSendPhoneSMSCode ("your_app_secret", "your_phone_number");

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public void didRequestSendPhoneSMSCode(GizWifiErrorCode result, String token) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 请求成功

10.        } else {

11.            // 请求失败

12.        }

13.    }

14.}
复制代码
第二步:用短信验证码注册时,APP把手机收到的短信验证码传给SDK,填上手机号和密码就可以注册了。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().registerUser("your_phone_number", "your_password", "your_verify_code", GizUserAccountType.GizUserPhone);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public void didRegisterUser(GizWifiErrorCode result, String uid,  String token) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 注册成功

10.        } else {

11.            // 注册失败

12.        }

13.    }

14.}
复制代码3.2.2.2.        注册普通用户
注册普通用户,使用用户名、密码即可创建一个账号。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().registerUser("your_user_name", "your_password", null, GizUserAccountType.GizUserNormal);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public void didRegisterUser(GizWifiErrorCode result, String uid,  String token) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 注册成功

10.        } else {

11.            // 注册失败

12.        }

13.    }

14.}
复制代码3.2.2.3.        注册邮箱用户
通过有效的电子邮箱地址,注册一个账号。注册成功后,云端会给指定邮箱发送注册成功的邮件。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().registerUser("your_email_address", "your_password", null, GizUserAccountType.GizUserEmail);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public void didRegisterUser(GizWifiErrorCode result, String uid,  String token) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 注册成功

10.        } else {

11.            // 注册失败

12.        }

13.    }

14.}
复制代码3.2.3.        用户登录
机智云提供三种用户登录方式:实名登录、匿名登录、第三方账号登录。实名登录适用于设计了登录界面,必须使用用户名密码注册登录以后才能使用的APP。匿名登录适用于没有设计登录界面,由后台自动生成用户账号的APP。登录后获取到的token有效期为7天。
3.2.3.1.        实名登录
实名用户登录时,用户名可以是注册过的手机号、邮箱、普通用户名。登录账号要先注册好,如果更换了AppID,登录账号需要重新注册。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().userLogin("your_user_name", "your_password");

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didUserLogin(GizWifiErrorCode result, String uid,  String token) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 登录成功

10.        } else {

11.            // 登录失败

12.        }

13.    }

14.}
复制代码3.2.3.2.        匿名登录
用户每次匿名登录时,获取到的uid是相同的。Android SDK使用Android ID生成登录账号。每个Android系统都有一个独立的Android ID,系统刷机后将改变。因此,系统刷机后匿名登录的用户信息将无法保留。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().userLoginAnonymous();

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didUserLogin(GizWifiErrorCode result, String uid,  String token) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 登录成功

10.        } else {

11.            // 登录失败

12.        }

13.    }

14.}
复制代码3.2.3.3.        第三方账号登录
目前支持的第三方账号有百度、新浪、腾讯。用户可以使用这三者的API获取到uid和token登录机智云,使用第三方账号登录时无需在机智云上注册,可直接登录。 开发者可通过新浪、百度或腾讯api获取uid和token, 具体方法请参考各第三方平台的开发者文档。

【示例代码】


01.// 以新浪账号为例

02.GizWifiSDK.sharedInstance().setListener(mListener);

03.GizWifiSDK.sharedInstance().loginWithThirdAccount(GizThirdAccountType.GizThirdSINA, "your_third_uid", "your_third_token");

04.

05.// 实现回调

06.GizWifiSDKListener mListener = new GizWifiSDKListener() {

07.    @Override

08.    public  void didUserLogin(GizWifiErrorCode result, String uid,  String token) {

09.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

10.            // 登录成功

11.        } else {

12.            // 登录失败

13.        }

14.    }

15.}
复制代码3.2.4.        重置密码
如果忘记了用户密码,可以通过手机验证码或邮箱设置新的密码。SDK支持手机号重置密码和邮箱重置密码两种,手机号重置需要接收验证码,邮箱重置需要进⼊邮箱,根据链接提示进行重置。
3.2.4.1.        手机号重置密码
手机号重置密码时,需要先获取短信验证码再重置。获取短信验证码方式与手机注册时相同。

第一步:获取短信验证码

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().requestSendPhoneSMSCode("your_app_secret", "your_phone_number");

03.

04.GizWifiSDKListener mListener = new GizWifiSDKListener() {

05.    @Override

06.    public void didRequestSendPhoneSMSCode(GizWifiErrorCode result, String token) {

07.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

08.            // 请求成功

09.        } else {

10.            // 请求失败

11.        }

12.    }

13.}
复制代码
第二步:用短信验证码重置密码

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().resetPassword("your_phone_number", "your_verify_code", "your_new_password", GizUserAccountType.GizUserPhone);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didChangeUserPassword(GizWifiErrorCode result) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 修改成功

10.        } else {

11.            // 修改失败

12.        }

13.    }

14.}
复制代码3.2.4.2.        邮箱重置密码
邮箱重置密码时,云端会给指定邮箱发送安全链接。用户需要到邮箱中查收邮件,并按邮件指示执行重置操作。重置密码邮件有可能进入用户的邮箱的垃圾箱中,需提醒用户。

邮件发送成功回调与密码修改成功回调一致,因此需要注意在回调的时候区分。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().resetPassword("your_email_address", null, "your_new_password", GizUserAccountType.GizUserEmail);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didChangeUserPassword(GizWifiErrorCode result) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.                //重置密码邮件发送成功,提示用户查收

10.        } else {

11.                //重置密码邮件发送失败,弹出错误信息

12.        }

13.    }

14.}
复制代码3.2.5.        修改密码
用户登录后可以修改密码。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().changeUserPassword("your_token", "your_old_password", "your_new_password");

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didChangeUserPassword(GizWifiErrorCode result) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 修改成功

10.        } else {

11.            // 修改失败

12.        }

13.    }

14.}
复制代码3.2.6.        匿名用户转换
匿名注册的用户可以转换为普通用户或者手机用户,转换后匿名用户的信息会转移到实名用户下,原匿名账号失效。但普通用户和手机用户必须是还未注册过的,已注册的用户名是无法转换的。
3.2.6.1.        匿名用户转普通用户
转普通用户时,填入待转换的用户名、密码,以及登录的token就可以了。

【示例代码】


01.// 匿名转手机用户

02.GizWifiSDK.sharedInstance().setListener(mListener);

03.GizWifiSDK.sharedInstance().transAnonymousUser("your_token", "your_user_name", "your_password", null, GizUserAccountType.GizUserNormal);

04.

05.// 实现回调

06.GizWifiSDKListener mListener = new GizWifiSDKListener() {

07.    @Override

08.    public  void didTransAnonymousUser(GizWifiErrorCode result) {

09.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

10.            // 转换成功

11.        } else {

12.            // 转换失败

13.        }

14.    }

15.}
复制代码3.2.6.2.        匿名用户转手机用户
转手机用户时,需要填入待转换的手机号、密码、短信验证码,登录的token。获取短信验证码的过程与手机注册时一样。

【示例代码】


01.// 匿名转手机用户

02.GizWifiSDK.sharedInstance().setListener(mListener);

03.GizWifiSDK.sharedInstance().transAnonymousUser("your_token", "your_phone_number", "your_password", "your_verify_code", GizUserAccountType. GizUserPhone);

04.

05.// 实现回调

06.GizWifiSDKListener mListener = new GizWifiSDKListener() {

07.    @Override

08.    public  void didTransAnonymousUser(GizWifiErrorCode result) {

09.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

10.            // 转换成功

11.        } else {

12.            // 转换失败

13.        }

14.    }

15.}
复制代码3.2.7.        修改用户信息
实名用户不支持修改普通用户名,可以修改邮箱、手机号,可以补充个人信息。实名用户必须登录后才能修改这些信息,并且待修改的邮箱或手机号必须是已经注册过的。

实名用户修改邮箱或手机号成功后,可以使用修改后的邮箱或手机号登录。登录后获得的绑定设备列表与原实名用户一致。

修改邮箱或手机号时,可以同时补充个人信息。不想修改个人信息时,对应参数可以传null。同时修改个人信息时,如果邮箱或用户名修改成功而个人信息修改失败,回调会返回成功并在errorMessage中提示个人信息修改失败的原因。
3.2.7.1.        修改用户邮箱
只修改用户邮箱时,个人信息的参数传null,用户类型可以指定为邮箱用户。以下为修改用户邮箱的示例代码。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().changeUserInfo("your_token", "your_email_address", null, GizUserAccountType.GizUserEmail, null);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didChangeUserInfo(GizWifiErrorCode result) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 修改成功

10.        } else {

11.            // 修改失败

12.        }

13.    }

14.}
复制代码3.2.7.2.        修改用户手机号
只修改用户手机号时,个人信息参数传null,用户类型可以指定为手机用户。修改手机号之前,需要先获取手机验证码。以下示例代码为修改用户手机号的代码,获取短信验证码的代码请参考手机号注册。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().changeUserInfo("your_token", "your_phone_number", "your_verify_code", GizUserAccountType.GizUserPhone, null);

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public  void didChangeUserInfo(GizWifiErrorCode result) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 修改成功

10.        } else {

11.            // 修改失败

12.        }

13.    }

14.}
复制代码3.2.7.3.        修改用户个人信息
只修改用户个人信息时,手机号或邮箱参数传null,用户类型可以指定为普通用户。个人信息包含多项内容,通过GizUserInfo类指定。其中不想修改的信息填null,云端会保留上次修改过的值。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.

03.GizUserInfo additionalInfo = new GizUserInfo();

04.additionalInfo.setName("nickname");

05.additionalInfo.setGender(GizUserGenderType.Male);

06.additionalInfo.setBirthday("1990-1-1");

07.additionalInfo.setAddress("Beijing");

08.additionalInfo.setRemark("home");

09.

10.GizWifiSDK.sharedInstance().changeUserInfo("your_token", null, null, GizUserAccountType.GizUserNormal, additionalInfo);

11.

12.// 实现回调

13.GizWifiSDKListener mListener = new GizWifiSDKListener() {

14.    @Override

15.    public  void didChangeUserInfo(GizWifiErrorCode result) {

16.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

17.            // 修改成功

18.        } else {

19.            // 修改失败

20.        }

21.    }

22.}
复制代码3.2.7.4.        同时修改邮箱和个人信息
修改邮箱同时修改个人信息时,用户类型需指定为邮箱用户。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.

03.GizUserInfo additionalInfo = new GizUserInfo();

04.additionalInfo.setName("nickname");

05.additionalInfo.setGender(GizUserGenderType.Male);

06.additionalInfo.setBirthday("1990-1-1");

07.additionalInfo.setAddress("Beijing");

08.additionalInfo.setRemark("home");

09.

10.GizWifiSDK.sharedInstance().changeUserInfo("your_token", "your_email_address", null, GizUserAccountType.GizUserEmail, additionalInfo);

11.

12.// 实现回调

13.GizWifiSDKListener mListener = new GizWifiSDKListener() {

14.    @Override

15.    public  void didChangeUserInfo(GizWifiErrorCode result) {

16.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

17.            // 修改成功

18.        } else {

19.            // 修改失败

20.        }

21.    }

22.}
复制代码3.2.7.5.        同时修改手机号和个人信息
修改手机号同时修改个人信息时,用户类型需指定为手机用户。修改手机号同样需要先获取手机验证码,获取短信验证码的代码请参考手机号注册。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.

03.GizUserInfo additionalInfo = new GizUserInfo();

04.additionalInfo.setName("nickname");

05.additionalInfo.setGender(GizUserGenderType.Male);

06.additionalInfo.setBirthday("1990-1-1");

07.additionalInfo.setAddress("Beijing");

08.additionalInfo.setRemark("home");

09.

10.GizWifiSDK.sharedInstance().changeUserInfo("your_token", "your_phone_number", "your_verify_code", GizUserAccountType.GizUserPhone, additionalInfo);

11.

12.// 实现回调

13.GizWifiSDKListener mListener = new GizWifiSDKListener() {

14.    @Override

15.    public  void didChangeUserInfo(GizWifiErrorCode result) {

16.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

17.            // 修改成功

18.        } else {

19.            // 修改失败

20.        }

21.    }

22.}
复制代码










点评回复 支持  反对   
使用道具 举报


.
  





boboP







查看详细资料









20
主题

208
帖子
286
积分

超级版主

Rank: 8Rank: 8
积分286..发消息
.
5#  



  楼主| 发表于 2016-8-8 11:40:26 | 只看该作者




3.3.        配置设备入网部分
控制设备前,需要先让设备连到路由器上。连上路由器的设备,如果路由器能接入外网,设备会自动注册到机智云。

有两种配置方式能够让设备连到路由器上,一种是Airlink方式,一种是Softap方式,APP可以根据产品需求采取相应的配置方式。在开始配置前,设备要先进入配置模式,然后APP调用配置接口发送要配置的路由器ssid和密码。设备配置成功后,SDK给APP返回已配置成功的设备mac地址和产品类型标识,便于APP做下一步的操作。如果设备是重置后进入的配置模式,如果配置成功时设备还来不及从云端获取到DID,则APP得到的DID为空。

SDK的设备配置接口如果超时时间还未结束,无法进行下一次配置。此外,因为设备配置成功的广播包只有APP连到同一路由上才能收取,因此这个超时时间应该预留出APP连接路由器的时间。

需要注意的是,如果配置上线的设备不是APP要获取的产品类型,该设备就不会出现在设备列表中。
3.3.1.        设备配置流程图

3.3.2.        AirLink配置
AirLink使⽤UDP广播方式,由手机端发出含有目标路由器名称和密码的广播,设备上的Wifi模块接收到广播包后自动连接目标路由器,连上路由器后发出配置成功广播,通知手机配置已完成。 模块开启AirLink模式后,如果一分钟内未收到AirLink广播或无法正确连上路由器,将进入SoftAP模式。

【示例代码】


01.// 让手机连上目标Wifi

02.// MCU发出开启AirLink串口指令,通知模组开启AirLink模式。详情请参考《智能云空调-机智云接入串口通信协议文档》

03.

04.//配置设备入网,发送要配置的wifi名称、密码

05.GizWifiSDK.sharedInstance().setListener(mListener);

06.List<GizWifiGAgentType> types = new ArrayList<GizWifiGAgentType> ();

07.types.add(GizWifiGAgentType.GizGAgentESP); GizWifiSDK.sharedInstance().setDeviceOnboarding("your_ssid", "your_key", GizWifiConfigureMode.GizWifiAirLink, null, 60, types);

08.

09.GizWifiSDKListener mListener = new GizWifiSDKListener() {

10.    //等待配置完成或超时,回调配置完成接口

11.    @Override

12.    public  void didSetDeviceOnboarding (GizWifiErrorCode result, String mac, String did, String productKey) {

13.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

14.            // 配置成功

15.        } else {

16.            // 配置失败

17.        }

18.    }

19.};
复制代码3.3.3.        SoftAP配置
设备进入SoftAP模式后,会产生一个Wifi热点。手机连上此热点后,将要配置的SSID和密码发给设备。设备上的Wi-Fi模块接收到SoftAP配置包后自动连接目标路由器,与airlink一样,连上路由器后发出配置成功广播,通知手机配置已完成。

使用机智云提供的模组固件,设备产生的Wifi热点以“XPG-GAgent-”开头,密码为” 123456789”。其他厂商提供的模组,SoftAP热点名称由各自厂商指定。APP可以根据需要传入正确的热点前缀。

【示例代码】


01.// MCU发出进入SoftAP串口指令,通知模组开启SoftAP模式。详情请参考《智能云空调-机智云接入串口通信协议文档》

02.//让手机连接模组的SoftAP热点

03.

04.//配置设备入网,发送要配置的wifi名称、密码

05.GizWifiSDK.sharedInstance().setListener(mListener);

06.GizWifiSDK.sharedInstance().setDeviceOnboarding("your_ssid", "your_key", GizWifiConfigureMode.GizWifiSoftAP, "your_gagent_hotspot_prefix", 60, null);

07.

08.//模块收到配置信息,尝试连接路由器并自动关闭热点

09.//让手机连接到配置的wifi上

10.

11.GizWifiSDKListener mListener = new GizWifiSDKListener() {

12.    //等待配置完成或超时,回调配置完成接口

13.    @Override

14.    public  void didSetDeviceOnboarding (GizWifiErrorCode result, String mac, String did, String productKey) {

15.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

16.            // 配置成功

17.        } else {

18.            // 配置失败

19.        }

20.    }

21.};
复制代码










点评回复 支持  反对   
使用道具 举报


.
  





boboP







查看详细资料









20
主题

208
帖子
286
积分

超级版主

Rank: 8Rank: 8
积分286..发消息
.
6#  



  楼主| 发表于 2016-8-8 11:43:54 | 只看该作者




3.4.        设备发现和订阅部分
3.4.1.        设备发现和订阅流程图

3.4.2.        设备发现
APP设置好监听,启动SDK后,就可以收到SDK的设备列表推送。每次局域网设备或者用户绑定设备发生变化时,SDK都会主动上报最新的设备列表。设备断电再上电、有新设备上线等都会触发设备列表发生变化。用户登录后,SDK会主动把用户已绑定的设备列表上报给APP,绑定设备在不同的手机上登录帐号都可获取到。

如果APP想要刷新绑定设备列表,可以调用绑定设备列表接口,同时可以指定自己关心的产品类型标识,SDK会把筛选后的设备列表返回给APP。

SDK提供设备列表缓存,设备列表中的设备对象在整个APP生命周期中一直有效。缓存的设备列表会与当前最新的已发现设备同步更新。

【示例代码】


01.// 使用缓存的设备列表刷新UI

02.List<GizWifiDevice> devices = GizWifiSDK.sharedInstance().getDeviceList();

03.

04.// 接收设备列表变化上报,刷新UI

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.@Override

07.public  void didDiscovered(GizWifiErrorCode result, List<GizWifiDevice> deviceList) {

08.    // 提示错误原因

09.    if(result != GizWifiErrorCode.GIZ_SDK_SUCCESS) {

10.        Log.d("", "result: " + result.name());

11.    }

12.        // 显示变化后的设备列表

13.        Log.d("", "discovered deviceList: " + deviceList);

14.        devices = deviceList;

15.    }

16.};

17.

18.// 主动刷新绑定设备列表、指定筛选的设备productKey

19.List<String> pks = new ArrayList<String> ();

20.pks.add("your_productKey");

21.GizWifiSDK.sharedInstance().getBoundDevices("your_uid", "your_token", pks);
复制代码3.4.3.        设置设备的**
在设备列表中得到设备对象,为其设置设备**,以便于刷新设备UI。APP根据自己的需要实现相应的回调。
3.4.4.        设备订阅和绑定
APP得到设备列表后,给设备设置监听后,可以订阅设备。已订阅的设备将被自动绑定和自动登录,设备登录成功后会主动上报最新状态。

自动绑定仅限于局域网设备。对于无法在局域网内发现的设备,APP可以通过手动绑定的方式完成绑定。绑定成功的设备,需要订阅后才能使用。

无论是手动绑定还是自动绑定,设备的remark和alias信息,都需要在设备绑定成功后再设置。 解除订阅的设备,连接会被断开,不能再继续下发控制指令了。
3.4.4.1.        设备订阅
所有通过SDK得到的设备,都可以订阅,订阅结果通过回调返回。订阅成功的设备,要在其网络状态变为可控时才能查询状态和下发控制指令。

【示例代码】


01.// 以设备列表中的第一个设备实例为例,为其设置监听

02.GizWifiDevice mDevice = null;

03.for (int i = 0; i < deviceList.size(); i++) {

04.    mDevice = deviceList[0];

05.    mDevice.setListener(mListener);

06.    mDevice.setSubscribe(true);

07.    break;

08.}

09.

10.GizWifiDeviceListener mListener = new GizWifiDeviceListener() {

11.    @Override

12.    public  void didSetSubscribe(GizWifiErrorCode result, GizWifiDevice device, boolean isSubscribed) {

13.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

14.            // 订阅或解除订阅成功

15.        } else {

16.            // 失败

17.        }

18.    }

19.};
复制代码3.4.4.2.        非局域网设备绑定
APP可以通过设备的mac、productKey、productSecret完成非局域网设备的绑定,可以用上述信息生成二维码,APP通过扫码方式绑定。GPRS设备、蓝牙设备等都是无法通过Wifi局域网发现的设备,都属于非局域网设备。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().bindRemoteDevice ("your_uid", "your_token", "your_device_mac", "your_device_product_key", "your_product_secret");

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public void didBindDevice(GizWifiErrorCode result, String did) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 绑定成功

10.        } else {

11.            // 绑定失败

12.        }

13.    }

14.};
复制代码3.4.4.3.        设置设备的绑定信息
不订阅设备也可以设置设备的绑定信息。在设备列表中找到要修改的设备,如果是已绑定的,可以修改remark和alias信息。

【示例代码】


01.// mDevice是从设备列表中获取到的设备实体对象,设置监听

02.mDevice.setCustomInfo("your_remark", "your_alias");

03.

04.// 实现回调

05.GizWifiDeviceListener mListener = new GizWifiDeviceListener() {

06.    @Override

07.    public void didSetCustomInfo(GizWifiErrorCode result, GizWifiDevice device) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 修改成功

10.        } else {

11.            // 修改失败

12.        }

13.    }

14.};
复制代码3.4.5.        设备解绑
已绑定的设备可以解绑,解绑需要APP调用接口完成操作,SDK不支持自动解绑。对于已订阅的设备,解绑成功时会被解除订阅,同时断开设备连接,设备状态也不会再主动上报了。设备解绑后,APP刷新绑定设备列表时就得不到该设备了。

【示例代码】


01.GizWifiSDK.sharedInstance().setListener(mListener);

02.GizWifiSDK.sharedInstance().unbindDevice("your_uid", "your_token", "your_device_did");

03.

04.// 实现回调

05.GizWifiSDKListener mListener = new GizWifiSDKListener() {

06.    @Override

07.    public void didUnbindDevice(GizWifiErrorCode result, String did) {

08.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

09.            // 解绑成功

10.        } else {

11.            // 解绑失败

12.        }

13.    }

14.};
复制代码3.4.6.        获取设备硬件信息
不订阅设备也可以获取到硬件信息。APP可以获取模块协议版本号,mcu固件版本号等硬件信息,但是只能在小循环下才能获取。

【示例代码】


01.// mDevice是从设备列表中获取到的设备实体对象,设置监听

02.mDevice.setListener(mListener);

03.mDevice.getHardwareInfo();

04.

05.// 实现回调

06.GizWifiDeviceListener mListener = new GizWifiDeviceListener() {

07.    @Override

08.    public  void didGetHardwareInfo(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, String> hardwareInfo) {

09.        StringBuilder sb = new StringBuilder();

10.        if(result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

11.            sb.append("Wifi Hardware Version:" + hardwareInfo.get("wifiHardVersion")

12.                                    + "\r\n");

13.            sb.append("Wifi Software Version:" + hardwareInfo.get("wifiSoftVersion")

14.                                    + "\r\n");

15.            sb.append("MCU Hardware Version:" + hardwareInfo.get("mcuHardVersion")

16.                                    + "\r\n");

17.            sb.append("MCU Software Version:" + hardwareInfo.get("mcuSoftVersion")

18.                                    + "\r\n");

19.            sb.append("Firmware Id:" + hardwareInfo.get("wifiFirmwareId") + "\r\n");

20.            sb.append("Firmware Version:" + hardwareInfo.get("wifiFirmwareVer")

21.                                    + "\r\n");

22.            sb.append("Product Key:" + hardwareInfo.get("productKey") + "\r\n");

23.            sb.append("Device ID:" + device.getDid() + "\r\n");

24.            sb.append("Device IP:" + device.getIPAddress() + "\r\n");

25.            sb.append("Device MAC:" + device.getMacAddress() + "\r\n");

26.

27.        }else{

28.            sb.append("获取失败,错误号:" + result);

29.        }

30.

31.        Message msg = new Message();

32.        msg.what = HARDWARE;

33.        msg.obj = sb.toString();

34.        handler.sendMessage(msg);

35.    }

36.};
复制代码











点评回复 支持  反对   
使用道具 举报


.
  





boboP







查看详细资料









20
主题

208
帖子
286
积分

超级版主

Rank: 8Rank: 8
积分286..发消息
.
7#  



  楼主| 发表于 2016-8-8 11:46:54 | 只看该作者




3.5.        设备控制部分
SDK通过字典键值对方式进行设备控制和状态接收。SDK接收到APP下发的指令字典后,对应解析为设备可识别的数据,发送给设备。反之,SDK收到设备回复或上报的数据后,对应解析为字典键值对上报给APP。

智能设备需正确烧写了GAgent固件和机智云串口通讯协议。如果设备定义了数据点,APP发送的指令必须符合数据点定义。如果设备没有定义数据点,设备指令可以按照透传数据以自定义格式下发。
3.5.1.        设备控制流程图

3.5.2.        发送控制指令
设备订阅变成可控状态后,APP可以发送操作指令。操作指令是字典格式,键值对为数据点名称和值。操作指令的确认回复,通过didReceiveData回调返回。

APP下发操作指令时可以指定sn,通过回调参数中的sn能够对应到下发指令是否发送成功了。但回调参数dataMap有可能是空字典,这取决于设备回复时是否携带当前数据点的状态。

如果APP下发指令后只关心是否有设备状态上报,那么下发指令的sn可填0,这时回调参数sn也为0。

【示例代码】


01./*

02. * 以下代码为App使用sn的示例。如果App不使用sn,sn可设为0,回调中也不需要判断sn

03. */

04.// mDevice是从设备列表中获取到的设备实体对象,设置监听

05.mDevice.setListener(mListener);

06.

07.// 订阅设备并变为可控状态后,执行开灯动作

08.int sn = 5; // 如果App不使用sn,此处可写成 int sn = 0;

09.ConcurrentHashMap<String, Object> command = new ConcurrentHashMap<String, Object> ();

10.command.put("LED_OnOff", true);

11.mDevice.write(command, sn);

12.

13.// 实现回调

14.GizWifiDeviceListener mListener = new GizWifiDeviceListener() {

15.    @Override

16.    public  void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {

17.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

18.            // 如果App不使用sn,此处不需要判断sn

19.            if (sn == 5) {

20.                // 命令序号相符,开灯指令执行成功

21.            } else {

22.                // 其他命令的ack或者数据上报

23.            }

24.        } else {

25.            // 操作失败

26.        }

27.    }

28.};
复制代码3.5.3.        接收设备状态
设备订阅变成可控状态后,APP可以随时收到设备状态的主动上报,仍然通过didReceiveData回调返回。设备上报状态时,回调参数sn为0,回调参数dataMap为设备上报的状态。

【示例代码】


01.GizWifiDeviceListener mListener = new GizWifiDeviceListener() {

02.    @Override

03.    public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {

04.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

05.

06.        // 已定义的设备数据点,有布尔、数值和枚举型数据

07.        if (dataMap.get("data") != null) {

08.            ConcurrentHashMap<String, Object> map = (ConcurrentHashMap<String, Object>) dataMap.get("data");

09.

10.                // 普通数据点,打印对应的key和value

11.                StringBuilder sb = new StringBuilder();

12.                for (String key : map.keySet()) {

13.                    sb.append(key + "  :" + map.get(key) + "\r\n");

14.                    Toast.makeText(DeviceControlActivity.this,

15.                            sb.toString(), Toast.LENGTH_SHORT).show();

16.                }

17.

18.                // 扩展数据点,key如果是“BBBB”

19.                byte[] bytes = (byte[]) map.get("BBBB");

20.                String string = Arrays.toString(bytes);

21.                Toast.makeText(DeviceControlActivity.this,

22.                        string, Toast.LENGTH_SHORT).show();

23.            }

24.

25.        // 已定义的设备故障数据点,设备发生故障后该字段有内容,没有发生故障则没内容

26.            if (dataMap.get("faults") != null) {

27.            ConcurrentHashMap<String, Object> map =  (ConcurrentHashMap<String, Object>)dataMap.get("faults");

28.                StringBuilder sb = new StringBuilder();

29.

30.                for (String key : map.keySet()) {

31.                    sb.append(key + "  :" +  map.get(key) + "\r\n");

32.                    Toast.makeText(DeviceControlActivity.this,

33.                            sb.toString(), Toast.LENGTH_SHORT).show();

34.                }

35.            }

36.

37.        // 已定义的设备报警数据点,设备发生报警后该字段有内容,没有发生报警则没内容

38.            if (dataMap.get("alerts") != null) {

39.            ConcurrentHashMap<String, Object> map =  (ConcurrentHashMap<String, Object>)dataMap.get("alerts");

40.                StringBuilder sb = new StringBuilder();

41.

42.                for (String key : map.keySet()) {

43.                            sb.append(key + "  :" +  map.get(key) + "\r\n");

44.                            Toast.makeText(DeviceControlActivity.this,

45.                            sb.toString(), Toast.LENGTH_SHORT).show();

46.                }

47.            }

48.

49.        // 透传数据,无数据点定义,适合开发者自行定义协议自行解析

50.            if (dataMap.get("binary") != null) {

51.                byte[] binary = (byte[]) dataMap.get("binary");

52.                Log.i("", "Binary data:"

53.                        + bytesToHex(binary, 0, binary.length));

54.            }

55.        }

56.    }

57.};
复制代码3.5.4.        设备状态查询
设备订阅变成可控状态后,APP可以查询设备状态。设备状态查询结果也通过didReceiveData回调返回,回调参数sn为0。回调参数dataMap为设备回复的状态。

【示例代码】


01.// mDevice是从设备列表中获取到的设备实体对象,设置监听

02.mDevice.setListener(mListener);

03.mDevice.getDeviceStatus();

04.

05.// 实现回调

06.GizWifiDeviceListener mListener = new GizWifiDeviceListener() {

07.    @Override

08.    public  void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {

09.        if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {

10.            // 数据解析与3.5.3相同

11.        } else {

12.            // 查询失败

13.        }

14.    }

15.};
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表