当前位置:   article > 正文

android onenet,Android平台接入OneNET

android onenet

1. OneNET简介

中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台。

平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,实现物联网设备的数据获取,数据存储,数据展现。

中移物联网官方网址

https://open.iot.10086.cn/

安卓平台接入OneNET方法:

①注册一个中移物联网的账号

8d64f56b5e393455b95a060879f1d8ed.png

②接下来开始创建产品与产品下的设备

690fe5aecdef62e0dfa0e5668caaf747.png

③点击右上角新建产品

21bec4ea6a551db71697d3f60032d972.png

c0c98f2ce1b5ff4655a35abc0d6c052f.png

ec3f64f125e798dbee9e0746e1693427.png

6c7b5cbdb4bad9c19a12d49bfe110549.png

1ca315e1dfefd23c207fb0e5361beb65.png

④接下来开始创建设备,点击提交之后出现

caa025355fc7fc66c6e2c4e9095bccb7.png

6ef4cd089f2ed222b6dbb26dd99d31b6.png

记住设备id,之后程序里会用到

007e51f00c99b589e39fdaf91307a76b.png

为设备添加APIKey,这也是之后程序里要用到的

e8f751999c33b850bba54318ce2b56c4.png

保存设备APIKey

1908d7620d8cc8b2a26ba4ef6b55ee81.png

接下来为设备创建数据流,所有的数据都是被上传到数据流的

这里进行查看数据流

8a1d988a4ce50a171ae2f137fd73735e.png

这里添加数据流

e2351a4a35ac749c6915989b83fe86ff.png

接下来就是程序方面的实现

使用http协议,具体的协议内容可以查看

https://open.iot.10086.cn/doc/art/id/190#43

具体二进制文件的传输看这个网址

https://open.iot.10086.cn/doc/art258.html#68

以下http协议代码的实现都是基于这个规定的,一定要打开对照来看

(1) 以POST实现文本数据的上传

public class OneNETUrlConnectionPost extends Thread {

private int SHOW_REQUEST = 0;

private Handler handler;

// 首先声明设备ID及apikey

private static final String DeviceID = "25857699";

// 个人使用就建议填产品key,设备key在二进制获取那里会权限不足

private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";

public OneNETUrlConnectionPost(Handler handler) {

this.handler = handler;

}

@Override

public void run() {

URL url;

HttpURLConnection connection;

try {

//data1代表云端的数据流是data1

String s1 = new String(",;" + "data1" + "," + "哈哈哈,终于成功了");

byte[] data = s1.getBytes();

// 先new出一个URL对象,传入网络地址

// 调用openConnection()方法获取到HttpURLConnection对象

// 自己创建的中移物联网的地址http://api.heclouds.com/devices/25857699/datapoints?type=5

url = new URL("http://api.heclouds.com/devices/" + DeviceID

+ "/datapoints?type=5");

connection = (HttpURLConnection) url.openConnection();

// 下面使一些自由的定制,比如设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头

connection.setConnectTimeout(8000);

connection.setReadTimeout(8000);

connection.setDoOutput(true);

connection.setDoInput(true);

connection.setRequestMethod("POST");

connection.setRequestProperty("api-key", ApiKey);

connection.setRequestProperty("Content-Length",

String.valueOf(data.length));

connection.setChunkedStreamingMode(5);

// 设置打开输出流

connection.setDoOutput(true);

// 拿到输出流

OutputStream os = connection.getOutputStream();

// 使用输出流往服务器提交数据

os.write(data);

os.flush();

os.close();

// //如果请求发送成功

if (connection.getResponseCode() == 200) {

// 接下来利用输入流对数据进行读取

InputStream is = connection.getInputStream();

BufferedReader br = new BufferedReader(

new InputStreamReader(is));

StringBuilder response = new StringBuilder();

String line;

while ((line = br.readLine()) != null) {

response.append(line);

}// 正常则返回{"errno":0,"error":"succ"},此函数为void,用不上这个

// 发送数据完毕,接下来用Handler进行提交成功显示

Message message = new Message();

message.what = SHOW_REQUEST;

message.obj = response.toString();

handler.sendMessage(message);

}

// 最后关闭HTTP连接

connection.disconnect();

} catch (Exception e) {

e.printStackTrace();

}

}

}

(2) 以POST实现字节数据的上传(包括图片视频等二进制文件)

public class OneNETUrlConnectionPostByte extends Thread {

private int SHOW_REQUEST = 0;

private Handler handler;

// 首先声明设备ID及apikey

private static final String DeviceID = "25857699";

// 个人使用就建议填产品key,设备key在二进制获取那里会权限不足

private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";

public OneNETUrlConnectionPostByte(Handler handler) {

this.handler = handler;

}

@Override

public void run() {

URL url;

// 自定义的字符数组将它上传到云端

byte[] my_data = { '8', '8', '6' };

HttpURLConnection connection;

try {

// 先new出一个URL对象,传入网络地址

// 调用openConnection()方法获取到HttpURLConnection对象

// 自己创建的中移物联网的地址http://api.heclouds.com/devices/25857699/datapoints?type=5

url = new URL("http://api.heclouds.com/bindata?device_id="

+ DeviceID + "&datastream_id=" + "data123");

connection = (HttpURLConnection) url.openConnection();

// 下面使一些自由的定制,比如设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头

connection.setConnectTimeout(8000);

connection.setReadTimeout(8000);

connection.setDoOutput(true);

connection.setDoInput(true);

connection.setRequestMethod("POST");

connection.setRequestProperty("api-key", ApiKey);

connection.setRequestProperty("Content-Length",

String.valueOf(my_data.length));

connection.setChunkedStreamingMode(5);

// 设置打开输出流

connection.setDoOutput(true);

// 拿到输出流

OutputStream os = connection.getOutputStream();

// 使用输出流往服务器提交数据

os.write(my_data);

os.flush();

os.close();

// //如果请求发送成功

if (connection.getResponseCode() == 200) {

// 接下来利用输入流对数据进行读取

InputStream is = connection.getInputStream();

BufferedReader br = new BufferedReader(

new InputStreamReader(is));

StringBuilder response = new StringBuilder();

String line;

while ((line = br.readLine()) != null) {

response.append(line);

}// 正常则返回{"errno":0,"error":"succ"},此函数为void,用不上这个

// 发送数据完毕,接下来用Handler进行提交成功显示

Message message = new Message();

message.what = SHOW_REQUEST;

message.obj = response.toString();

handler.sendMessage(message);

}

// 最后关闭HTTP连接

connection.disconnect();

} catch (Exception e) {

e.printStackTrace();

}

}

}

(3) 以GET实现文本数据的获取

public class OneNETHttpRequestGET extends Thread {

private int SHOW_REQUEST = 0;

private Handler handler;

// 首先声明设备ID及apikey

private static final String DeviceID = "25857699";

// 个人使用就建议填产品key,设备key在二进制获取那里会权限不足

private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";

public OneNETHttpRequestGET(Handler handler) {

this.handler = handler;

}

@Override

public void run() {

URL url;

HttpURLConnection connection;

try {

// 先new出一个URL对象,传入网络地址

// 调用openConnection()方法获取到HttpURLConnection对象

url = new URL("http://api.heclouds.com/devices/" + DeviceID

+ "/datastreams/" + "data1");

connection = (HttpURLConnection) url.openConnection();

// 下面使一些自由的定制,比如设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头

connection.setConnectTimeout(15000);

connection.setReadTimeout(15000);

connection.setRequestMethod("GET");

connection.setRequestProperty("api-key", ApiKey);

// 如果网页正确响应

if (connection.getResponseCode() == 200) {

// 接下来利用输入流对数据进行读取

InputStream is = connection.getInputStream();

BufferedReader br = new BufferedReader(

new InputStreamReader(is));

StringBuilder response = new StringBuilder();

String line;

while ((line = br.readLine()) != null) {

response.append(line);

}

// 读取数据完毕,接下来将数据传送到Handler进行显示

Message message = new Message();

message.what = SHOW_REQUEST;

message.obj = response.toString();

handler.sendMessage(message);

// 最后关闭HTTP连接

connection.disconnect();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

(4) 以GET实现字节数据的获取,但是存在小bug还未成功

public class OneNETHttpRequestGETByte extends Thread {

private int SHOW_REQUEST = 0;

private Handler handler;

// 首先声明设备ID及apikey

private static final String DeviceID = "25857699";

// 个人使用就建议填产品key,设备key在二进制获取那里会权限不足

private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";

public OneNETHttpRequestGETByte(Handler handler) {

this.handler = handler;

}

@Override

public void run() {

URL url;

HttpURLConnection connection;

try {

// 先new出一个URL对象,传入网络地址

// 调用openConnection()方法获取到HttpURLConnection对象

url = new URL("http://api.heclouds.com/bindata/"

+ "25857699_15201013688560_data123");

connection = (HttpURLConnection) url.openConnection();

// 下面使一些自由的定制,比如设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头

connection.setConnectTimeout(15000);

connection.setReadTimeout(15000);

connection.setRequestMethod("GET");

connection.setRequestProperty("api-key", ApiKey);

// 如果网页正确响应

if (connection.getResponseCode() == 200) {

// 接下来利用输入流对数据进行读取

InputStream is = connection.getInputStream();

BufferedReader br = new BufferedReader(

new InputStreamReader(is));

StringBuilder response = new StringBuilder();

String line;

while ((line = br.readLine()) != null) {

response.append(line);

}

// 读取数据完毕,接下来将数据传送到Handler进行显示

Message message = new Message();

message.what = SHOW_REQUEST;

message.obj = response.toString();

handler.sendMessage(message);

// 最后关闭HTTP连接

connection.disconnect();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

了解更多技术文章,欢迎关注我的个人公众号

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/549413
推荐阅读
相关标签
  

闽ICP备14008679号