小工具知识网

当前位置: 首页 > 行业知识 > 实现安卓连接阿里云物联网平台(2)

行业知识

实现安卓连接阿里云物联网平台(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)开始连接

上一篇:怎么查看外链排名?

下一篇:重拾C++之菜鸟刷算法第5篇---字符串