【超简单】教你如何用机智云开源框架打造AndroidAPP
本帖最后由 Genius 于 2017-1-11 12:43 编辑第一步:我们要下载开源框架,这样子做起来会非常简单(开源框架下载),下载完成后导入eclipse,如果你用的是Android Studio,那就要百度一下怎么导入了。
第二步:改sdk版本号,因为你下载的包可能跟机智云开发时用的版本可能不一样,我的是19,根据自己的环境修改
第三步:修改Json文件,在/GOpenSource_AppKit/assets/UIConfig.json下,首先我们要先创建一个APP,然后把app_id和app_secret填进去,如下图所示:
第四步:找到res/layout文件夹下面的:activity_gos_device_control.xml面局文件,我们拖一个开关进来,然后再添加id,如下图所示:
第五步:加入控制代码。找到/GOpenSource_AppKit/src/com/gizwits/opensource/appkit/ControlModule/GosDeviceControlActivity.java
在里面加入控制代码:
我们先写一个控制函数:
/**
* 发送指令
*
* @param key
* 数据点对应的标识名
* @param value
* 需要改变的值
*/
private void sendCommand(String key, Object value) {
int sn = 5;
ConcurrentHashMap<String, Object> hashMap = new ConcurrentHashMap<String, Object>();
hashMap.put(key, value);
device.write(hashMap, sn);
Log.i("Apptest", hashMap.toString());
}机智云的控制其实思想其实就是对Map数据的改变和读取。APP和MCU一起对Map进行改变。所以我们只要改变里面的值,就可以完成控制。
private void initView() {
btn_on = (ToggleButton) findViewById(R.id.btn_on);
<blockquote>btn_on.setOnCheckedChangeListener(new OnCheckedChangeListener() {这样就实现了对一个灯的控制。
那现在我有这样一个需求,我上一次开了灯,但是我把APP关了,我现在重新打开,但是现在UI上显示灯是关的,实际上是开的,那我点一个这个按键,开灯,此时灯还是开的。再点一下才是关灯。那我怎么读取灯的状态呢?
下面就来说一下怎么去读取状态并更新UI的这么一个功能。
首先,我们要设置一个**,里面有回调函数:
/** 设备** */
private GizWifiDeviceListener deviceListener = new GizWifiDeviceListener() {
// 接收数据回调
public void didReceiveData(GizWifiErrorCode result,
GizWifiDevice device,
ConcurrentHashMap<String, Object> dataMap, int sn) {
Message msg = new Message();
if (GizWifiErrorCode.GIZ_SDK_SUCCESS != result) {
// 查询成功
} else {
//查询失败
}
// 已定义的设备数据点,有布尔、数值和枚举型数据
if (dataMap.get("data") != null) {
deviceStatu = (ConcurrentHashMap<String, Object>) dataMap
.get("data");
// 根据标识名,在回调的map中找到设备上报的值
if (deviceStatu.get("switch_onoff") != null) {
// 根据设备上报的值更改按钮的图标
msg.what = UPDATE_UI;
handler.sendMessage(msg);
}
}
}
};didReceiveData(GizWifiErrorCode result,GizWifiDevice device,ConcurrentHashMap<String, Object> dataMap, int sn)是回调函数。
这里面dataMap.get("data"),是读取数据的意思,不是叫你把data改成你想要读的那个值。然后我们还要调用这个监听事件,否则不起作用。
private void initDevice() {
Intent intent = getIntent();
device = (GizWifiDevice) intent.getParcelableExtra("GizWifiDevice");
device.setListener(deviceListener);
deviceStatu = new ConcurrentHashMap<String, Object>();
Log.i("Apptest", device.getDid());
}然后再用Handler去更新UI,安卓里面不能用Theard去更新,程序会狗带。
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case UPDATE_UI:
updataUI();
break;
}
};
};这样就可以读到数据了,但是还有一个问题,就是如果只是退出了当前的Activity,没有退出APP时,再次进入,UI不会更新。此时就要重写这一个函数:
@Override
protected void onDestroy() {
super.onDestroy();
// 退出控制页面,取消设备订阅
device.setSubscribe(false);
}这样就大功告成了。本人小白,初学Android,大神轻喷。
Android开发 发表于 2017-1-6 17:27
开源框架下载下来 httpclient还报错!httpclient的包都没有?
不会吧,我的很正常,可以编译,但是在模拟器上不能运行,要在物理机上运行。 沉睡中的king 发表于 2017-1-16 23:40
一个app能不能识别两个不同PK的设备
这个功能是可以实现的,很简单, 都不用你写代码
具体参考:http://club.gizwits.com/thread-5261-1-1.html
沉睡中的king 发表于 2017-1-13 17:59
我是说app里不用把pk写进去吗?
我发现写没写都可以运行,但是我没试过其他项目,我只在MCU运行过一个项目,所以不知道写不写的区别 好喜欢楼主的分享,浅显易懂,还实用!!!
满满的干货~~ 开源框架下载下来 httpclient还报错!httpclient的包都没有? 谢谢分享,刚刚接触机智云 PK不用写人APP吗?
沉睡中的king 发表于 2017-1-12 15:26
PK不用写人APP吗?
什么意思?没看懂,不用人写APP? iDea 发表于 2017-1-12 20:51
什么意思?没看懂,不用人写APP?
我是说app里不用把pk写进去吗? iDea 发表于 2017-1-13 20:38
我发现写没写都可以运行,但是我没试过其他项目,我只在MCU运行过一个项目,所以不知道写不写的区别 ...
一个app能不能识别两个不同PK的设备 下载了开源框架,导入eclipse编译报错;怎么回事 GKXW 发表于 2017-3-2 11:39
下载了开源框架,导入eclipse编译报错;怎么回事
这个我还没试过,你改一下SDK版本号试试。你可以找一下机智云的技术支持。 http://club.gizwits.com/data/attachment/forum/201701/03/142846or3dzjfzxb3dnjmb.png 上述图片中的界面是在eclipse中打开的吗?怎么打开? GKXW 发表于 2017-3-6 17:08
上述图片中的界面是在eclipse中打开的吗?怎么打开?
你还是去看一下安卓的基本教程吧,这个问题太简单了,而且我上面也有写。 iDea 发表于 2017-3-2 19:18
这个我还没试过,你改一下SDK版本号试试。你可以找一下机智云的技术支持。 ...
确实是报错。 我这边也是。 版本号已经改过了。。。
改了SDK版本的情况下的报错。。。
能不能再虚拟设备上运行???? 楼主爸爸,在吗
页:
[1]
2