1. OneNET簡介
中國移動物聯網開放平臺是由中國移動打造的PaaS物聯網開放平臺,
平臺能夠幫助開發者輕松實作設備接入與設備連接,提供綜合性的物聯網解決方案,實作物聯網設備的資料獲取,資料存盤,資料展現,
中移物聯網官方網址
https://open.iot.10086.cn/
安卓平臺接入OneNET方法:
①注冊一個中移物聯網的賬號

②接下來開始創建產品與產品下的設備

③點擊右上角新建產品





④接下來開始創建設備,點擊提交之后出現


記住設備id,之后程式里會用到

為設備添加APIKey,這也是之后程式里要用到的

保存設備APIKey

接下來為設備創建資料流,所有的資料都是被上傳到資料流的
這里進行查看資料流

這里添加資料流

接下來就是程式方面的實作
使用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 = https://www.cnblogs.com/yuzhou1234/p/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 = https://www.cnblogs.com/yuzhou1234/p/{'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();
}
}
}
了解更多技術文章,歡迎關注我的個人公眾號

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/21792.html
標籤:Android
