阿里云物联网平台安卓link sdk的封装类

阿里云物联网平台安卓link sdk的封装类,第1张

阿里云物联网平台安卓link sdk的封装类,实现指定topic的发布,订阅,取消订阅

MQTT类,实现指定topic的发布,订阅,取消订阅

import android.content.Context;
import com.aliyun.alink.dm.api.DeviceInfo;
import com.aliyun.alink.linkkit.api.*;
import com.aliyun.alink.linksdk.cmp.connect.channel.MqttPublishRequest;
import com.aliyun.alink.linksdk.cmp.core.base.ARequest;
import com.aliyun.alink.linksdk.cmp.core.base.AResponse;
import com.aliyun.alink.linksdk.cmp.core.listener.IConnectSendListener;
import com.aliyun.alink.linksdk.tmp.device.payload.ValueWrapper;
import com.aliyun.alink.linksdk.tools.AError;
import com.whz.tools.*;

import java.util.HashMap;
import java.util.Map;

public class MQTT {
    ILinkKit iLinkKit;
    public void init(){
        this.iLinkKit=LinkKit.getInstance();
    }

    public void connect(String productKey, 
                        String deviceName, 
                        String deviceSecret,
                        Context context){
        DeviceInfo deviceInfo = new DeviceInfo();
        deviceInfo.productKey = productKey;
        deviceInfo.deviceName = deviceName;
        deviceInfo.deviceSecret = deviceSecret;
        Map propertyValues = new HashMap<>();
        IoTMqttClientConfig clientConfig = new IoTMqttClientConfig(productKey,                                 
                                                                    deviceName, 
                                                                    deviceSecret);
        LinkKitInitParams params = new LinkKitInitParams();
        params.deviceInfo = deviceInfo;
        params.propertyValues = propertyValues;
        params.mqttClientConfig = clientConfig;

        iLinkKit.init(context,params, new ILinkKitConnectListener() {
            @Override
            public void onError(AError error) {
            }
            @Override
            public void onInitDone(Object data) {
            }
        });
    }

    public void pub(String PubTopic, 
                    String PubMethod, 
                    String RelyTopic, 
                    String device,                  
                    int data){
        MqttPublishRequest request = new MqttPublishRequest();
        request.isRPC = false;
        request.qos = 0;
        request.topic = PubTopic;
        request.replyTopic =RelyTopic;
        request.payloadObj ="{\"id\":\"456\", \"version\":\"1.0\",\"method\":\""+PubMethod+"\",\"params\":{\""+device+"\""+":"+data+"} }";
        iLinkKit.publish(request, new IConnectSendListener() {
            @Override
            public void onResponse(ARequest aRequest, AResponse aResponse) {
            }
            @Override
            public void onFailure(ARequest aRequest, AError aError) {
            }
        });
    }

    public void sub(String SubTopic){
        if (SubTopic==null)return;
        Sub sub=new Sub(SubTopic,iLinkKit);
        sub.start();
    }

    public void unSub(String UnSubTopic){
        if(UnSubTopic==null)return;
        UnSub unSub=new UnSub(UnSubTopic,iLinkKit);
        unSub.start();
    }

    public void setListener(Listener listener){
        iLinkKit.registerOnPushListener(listener);
    }
}

工具类Listener,全局监听接口,所有下发的消息全部在此接受


import com.aliyun.alink.linksdk.cmp.core.base.AMessage;
import com.aliyun.alink.linksdk.cmp.core.base.ConnectState;
import com.aliyun.alink.linksdk.cmp.core.listener.IConnectNotifyListener;

public class Listener implements IConnectNotifyListener{
    private String data;

    @Override
    public void onNotify(String connectId, String topic, AMessage aMessage) {
        data = new String((byte[]) aMessage.data);
    }

    @Override
    public boolean shouldHandle(String connectId, String topic) {
        return true;
    }

    @Override
    public void onConnectStateChange(String connectId, ConnectState connectState) {
    }

    public String getData(){
        return data;
    }

}

工具类Sub、UnSub、SubListener、UnSubListener。


由于订阅、取消订阅时安卓设备可能存在掉线情况,因此需要通过Sub、UnSub线程类,进行循环多次发送订阅、取消订阅指令,直到订阅成功。


使用线程可以避免安卓循环长度过长而报错,并且提高运行速度。


订阅是否成功由工具类SubListener、UnSubListener反馈。


Sub线程类

import com.aliyun.alink.linkkit.api.ILinkKit;
import com.aliyun.alink.linksdk.cmp.connect.channel.MqttSubscribeRequest;

public class Sub extends Thread{
    private String SubTopic;
    private ILinkKit iLinkKit;
    public Sub(String SubTopic,ILinkKit iLinkKit){
        this.iLinkKit=iLinkKit;
        this.SubTopic=SubTopic;
    }
    @Override
    public void run(){
        if (SubTopic==null)return;
        boolean isSub=false;
        MqttSubscribeRequest subscribeRequest = new MqttSubscribeRequest();
        subscribeRequest.topic = SubTopic;
        subscribeRequest.isSubscribe = true;
        subscribeRequest.qos = 0;
        SubListener subListener=new SubListener();
        while (!isSub){
            iLinkKit.subscribe(subscribeRequest,subListener);
            isSub=subListener.getIsSub();
        }
    }
}

UnSub线程类


import com.aliyun.alink.linkkit.api.ILinkKit;
import com.aliyun.alink.linksdk.cmp.connect.channel.MqttSubscribeRequest;

public class UnSub extends Thread {
    private String UnSubTopic;
    private ILinkKit iLinkKit;
    public UnSub(String UnSubTopic,ILinkKit iLinkKit){
        this.iLinkKit=iLinkKit;
        this.UnSubTopic=UnSubTopic;
    }

    @Override
    public void run() {
        if (UnSubTopic == null) return;
        boolean isUnSub=false;
        MqttSubscribeRequest UnSubscribeRequest = new MqttSubscribeRequest();
        UnSubscribeRequest.topic = UnSubTopic;
        UnSubscribeRequest.isSubscribe = false;
        UnSubscribeRequest.qos = 0; // 支持0或者1

        UnSubListener unSubListener = new UnSubListener();
        while (!isUnSub) {
            iLinkKit.unsubscribe(UnSubscribeRequest, unSubListener);
            isUnSub=unSubListener.getIsUnSub();
        }
    }
}

SubListener

import com.aliyun.alink.linksdk.cmp.core.listener.IConnectSubscribeListener;
import com.aliyun.alink.linksdk.tools.AError;

public class SubListener implements IConnectSubscribeListener {
    private boolean isSub=false;
    @Override
    public void onSuccess() {
        isSub=true;
    }

    @Override
    public void onFailure(AError aError) {
        isSub=false;
    }

    public boolean getIsSub(){
        return isSub;
    }
}

UnSubListener


import com.aliyun.alink.linksdk.cmp.core.listener.IConnectUnscribeListener;
import com.aliyun.alink.linksdk.tools.AError;

public class UnSubListener implements IConnectUnscribeListener {
    private boolean IsUnSub=false;
    @Override
    public void onSuccess() {
        IsUnSub=true;
    }

    @Override
    public void onFailure(AError aError) {
        IsUnSub=false;
    }

    public boolean getIsUnSub(){
        return IsUnSub;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存