文章主要讲解安卓接入机智云平台的方法,点击一个按钮实现数据的发送,点击另一个按钮实现数据的接收
我使用的方法是:使用一个机智云的开源框架,(相当于是一个协议栈),对源码进行修改然后,和配置,在添加上自己的代码就可以实现简单的功能了。
当然做安卓的开发还是需要有一定的安卓基础的,不过如果你实在不会安卓,仅仅是会硬件也没有关系,下面会有一些别的博主的视频,以及你可以自己在机智云上面建立一个虚拟的安卓app,然后机智云平台会自己吧你建立的安卓程序打包,然后你就可以在你的手机上面使用你建立的app了
不喜欢看文字的朋友大家可以直接去看这个博主的视频,里面讲解特别详细,(感谢这个博主),下面是链接,爱奇艺的视频
相关的视频
http://www.iqiyi.com/paopao/u/2343470149/video/
博主:andorid攻城狮小徐
在视频里面需要你下载一个安卓studio的开源项目,基于开源项目来开发程序
https://github.com/gizwits/GOpenSource_AppKit_Android_AS
androidStudio开发品台的机智云开发开源框架:只要在安卓studio里面导入这个开源框架,里面就已经集成好了机智云的一些功能,就相当于是一个协议栈,我们只需要根据自己的需要
进行修改就可以了
还有与之相关的博客
https://blog.csdn.net/xh870189248/article/details/75529253
下面我们就开始讲解具体的开发步骤
1.首先你需要在机智云平台上创建一个项目,然后再创建一个产品,获得到产品的一些信息,后面开发App的时候要用。
2.下载开源的项目,并且吧开源的项目添加到android studio里面。(至于怎么下载安卓studio大家自己百度吧,这个软件可是不好下载的。)
开源项目下载地址
https://github.com/gizwits/GOpenSource_AppKit_Android_AS
3.吧项目导入android studio 里面,并且进行相关的配置,如果你只是想实现简单的收发数据,那么主要用到的文件只有三个
我们在分别介绍一下这三个文件
(1)当你在android studio 里面导入开源的项目以后,首先就要进入配置文件里面进行配置,这时候需要下载一些第三的包,所以你要保证你的电脑联网!!!!,配置以后我们才可以运行起来文件,否则就换闪退
(2)界面的代码(前端),我就只是写了两个按钮和一个文本框
(3) 后端的程序编写,我就直接上代码了
package com.gizwits.opensource.appkit.ControlModule;
import com.gizwits.gizwifisdk.api.GizWifiDevice;
import com.gizwits.gizwifisdk.enumration.GizWifiErrorCode;
import com.gizwits.gizwifisdk.listener.GizWifiDeviceListener
import com.gizwits.opensource.appkit.R;
import com.gizwits.opensource.appkit.CommonModule.GosBaseActivity;
import android.app.ActionBar;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.util.concurrent.ConcurrentHashMap;
public class GosDeviceControlActivity extends GosBaseActivity {
//这里就是我机智云李阿敏那个设备的控制页面
/** The tv MAC */
private TextView tvMAC;
/** The GizWifiDevice device */
private GizWifiDevice device; //这个就是你云端对应的那个设备
/** The ActionBar actionBar */
ActionBar actionBar;
//******************************* 定义一下我自己的控件
private Button bt_send,bt_rece;
//******************************* 定义一下我自己设备在云端的数据流
private String light = "LightOn";
private String temp = "temp";
//找到发送消息的缓冲区,就是一个哈希表
//用于发送数据,只要把数据放到这里面数据就会被发送到云端
private ConcurrentHashMap<String , Object> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gos_device_control);
initDevice();
setActionBar(true, true, device.getProductName());
initView();
}
private void initView() {
tvMAC = (TextView) findViewById(R.id.tvMAC);
if (null != device) {
tvMAC.setText(device.getProductName());
}
//这个是初始化函数,因为oncreat方法里面引入了这个函数,所以吧点击事件写在这里面也是可以的
bt_send = (Button) findViewById(R.id.MyButton_send);
bt_rece = (Button) findViewById(R.id.MyButton_rece);
bt_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//首先要先对map进行初始化
map = new ConcurrentHashMap<>();
map.put(light , true) ; //put 方法里面采用键值对的形式,前面是云端定义的数据点,后面是数据点的值
device.write(map , 0);
}
});
bt_rece.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//首先要对map进行初始化
map = new ConcurrentHashMap<>();
// Toast.makeText(this ,"")
// map.put(temp , 111) ; //put 方法里面采用键值对的形式,前面是云端定义的数据点,后面是数据点的值
// device.write(map , 0);
}
});
}
private void initDevice() {
Intent intent = getIntent();
device = (GizWifiDevice) intent.getParcelableExtra("GizWifiDevice");
device.setListener(listener);
// Log.i("Apptest", device.getDid());
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
break;
}
return super.onOptionsItemSelected(item);
}
private GizWifiDeviceListener listener = new GizWifiDeviceListener() {
@Override
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
super.didReceiveData(result, device, dataMap, sn);
//先判断是否为正确回调
//if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
//} //
//********************************* 这样处理和显示数是非常不合理的,因为不能在主线程里面
//进行UI操作,可能会造成线程阻塞从而闪退 , 要使用hanlder机制,进行处理
Log.i("rec", "receive from deceive "+dataMap.toString());
Toast.makeText(GosDeviceControlActivity.this ,dataMap.toString() ,Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onDestroy() {
//界面退出去以后关闭回调函数
device.setListener(null);
super.onDestroy();
}
}