行业知识
实现安卓连接阿里云物联网平台(2)
2026-11-04 05:16:26
来源:互联网转载
完整工程链接
链接:https://pan.baidu.com/s/1rIL6bY2NiSGX68qlRt3K2Q
提取码:生日
(1)创建一个新工程
(2)添加mqtt包的依赖
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
(3)联网权限配置
`
(4)添加AliyunIoTSignUtil工具类
将创建的工具类中的所有内容 除开第一行package 剩下全部内容替换成下面内容
import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import java.util.Arrays;import java.util.Map;/** * AliyunIoTSignUtil */public class AliyunIoTSignUtil { public static String sign(Map params, String deviceSecret, String signMethod) { //将参数Key按字典顺序排序 String[] sortedKeys = params.keySet().toArray(new String[] {}); Arrays.sort(sortedKeys); //生成规范化请求字符串 StringBuilder canonicalizedQueryString = new StringBuilder(); for (String key : sortedKeys) { if ("sign".equalsIgnoreCase(key)) { continue; } canonicalizedQueryString.append(key).append(params.get(key)); } try { String key = deviceSecret; return encryptHMAC(signMethod,canonicalizedQueryString.toString(), key); } catch (Exception e) { throw new RuntimeException(e); } } /** * HMACSHA1加密 * */ public static String encryptHMAC(String signMethod,String content, String key) throws Exception { SecretKey secretKey = new SecretKeySpec(key.getBytes("utf-8"), signMethod); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); byte[] data = mac.doFinal(content.getBytes("utf-8")); return bytesToHexString(data); } public static final String bytesToHexString(byte[] bArray) { StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i (5)替换MainActivity方法
此时会出现特别多报错部分,使用 ALT+ENTER引入class即可
import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.os.Handler;import android.util.Log;import org.eclipse.paho.client.mqttv3.MqttClient;import org.eclipse.paho.client.mqttv3.MqttConnectOptions;import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;import java.util.HashMap;import java.util.Map;public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); private String productKey = "";// 高级版产品key private String deviceName = "";//已经注册的设备id private String deviceSecret = "";//设备秘钥 final int POST_DEVICE_PROPERTIES_SUCCESS = 1002; final int POST_DEVICE_PROPERTIES_ERROR = 1003; private MqttClient mqttClient = null; private Handler mHandler ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.MQTT_Connect_Button).setOnClickListener((l) -> { new Thread(() -> initAliyunIoTClient()).start(); }); } /** * 使用 productKey,deviceName,deviceSecret 三元组建立IoT MQTT连接 */ private void initAliyunIoTClient() { try { String clientId = "androidthings" + System.currentTimeMillis(); Map params = new HashMap(16); params.put("productKey", productKey); params.put("deviceName", deviceName); params.put("clientId", clientId); String timestamp = String.valueOf(System.currentTimeMillis()); params.put("timestamp", timestamp); // cn-shanghai String targetServer = "tcp://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883"; String mqttclientId = clientId + "|securemode=3,signmethod=hmacsha1,timestamp=" + timestamp + "|"; String mqttUsername = deviceName + "&" + productKey; String mqttPassword = AliyunIoTSignUtil.sign(params, deviceSecret, "hmacsha1"); connectMqtt(targetServer, mqttclientId, mqttUsername, mqttPassword); } catch (Exception e) { e.printStackTrace(); mHandler.sendEmptyMessage(POST_DEVICE_PROPERTIES_ERROR); } } public void connectMqtt(String url, String clientId, String mqttUsername, String mqttPassword) throws Exception { MemoryPersistence persistence = new MemoryPersistence(); mqttClient = new MqttClient(url, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); // MQTT 3.1.1 connOpts.setMqttVersion(4); connOpts.setAutomaticReconnect(true); connOpts.setCleanSession(true); connOpts.setUserName(mqttUsername); connOpts.setPassword(mqttPassword.toCharArray()); connOpts.setKeepAliveInterval(60); mqttClient.connect(connOpts); Log.d(TAG, "connected " + url); }} (6)添加连接阿里云按钮
(6)将阿里云的三元组填入到代码中即可
(7)开始连接
上一篇:怎么查看外链排名?