zmt
3 years ago
17 changed files with 2 additions and 1165 deletions
-
2app/build.gradle
-
1face_module_2/.gitignore
-
62face_module_2/build.gradle
-
0face_module_2/consumer-rules.pro
-
23face_module_2/proguard-rules.pro
-
26face_module_2/src/androidTest/java/io/dcloud/zmt_module/ExampleInstrumentedTest.java
-
5face_module_2/src/main/AndroidManifest.xml
-
43face_module_2/src/main/java/io/dcloud/zmt_module/MyThread.java
-
8face_module_2/src/main/java/io/dcloud/zmt_module/SocketConfig.java
-
53face_module_2/src/main/java/io/dcloud/zmt_module/SocketHelper.java
-
193face_module_2/src/main/java/io/dcloud/zmt_module/TcpServer.java
-
189face_module_2/src/main/java/io/dcloud/zmt_module/Zmt_AppProxy.java
-
49face_module_2/src/main/java/io/dcloud/zmt_module/mqtt/MQTTRequest.java
-
402face_module_2/src/main/java/io/dcloud/zmt_module/mqtt/MQTTSample.java
-
92face_module_2/src/main/java/io/dcloud/zmt_module/zmtClass.java
-
17face_module_2/src/test/java/io/dcloud/zmt_module/ExampleUnitTest.java
-
2settings.gradle
@ -1 +0,0 @@ |
|||||
/build |
|
@ -1,62 +0,0 @@ |
|||||
plugins { |
|
||||
id 'com.android.library' |
|
||||
} |
|
||||
|
|
||||
android { |
|
||||
compileSdkVersion 29 |
|
||||
|
|
||||
defaultConfig { |
|
||||
minSdkVersion 16 |
|
||||
targetSdkVersion 28 |
|
||||
versionCode 1 |
|
||||
versionName "1.0" |
|
||||
|
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |
|
||||
consumerProguardFiles "consumer-rules.pro" |
|
||||
} |
|
||||
|
|
||||
buildTypes { |
|
||||
release { |
|
||||
minifyEnabled false |
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
//导入aar需要的配置 |
|
||||
repositories { |
|
||||
flatDir { |
|
||||
dirs 'libs' |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
dependencies { |
|
||||
|
|
||||
// implementation 'androidx.appcompat:appcompat:1.1.0' |
|
||||
// implementation 'com.google.android.material:material:1.1.0' |
|
||||
// testImplementation 'junit:junit:4.+' |
|
||||
// androidTestImplementation 'androidx.test.ext:junit:1.1.1' |
|
||||
// androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' |
|
||||
// |
|
||||
// //必须添加的依赖 |
|
||||
//// compileOnly 'com.android.support:recyclerview-v7:28.0.0' |
|
||||
//// compileOnly 'com.android.support:support-v4:28.0.0' |
|
||||
//// compileOnly 'com.android.support:appcompat-v7:28.0.0' |
|
||||
// compileOnly 'com.alibaba:fastjson:1.1.46.android' |
|
||||
// |
|
||||
// compileOnly fileTree(include: ['uniapp-v8-release.aar'], dir: '../app/libs') |
|
||||
|
|
||||
compileOnly fileTree(dir: 'libs', include: ['*.jar']) |
|
||||
|
|
||||
compileOnly 'androidx.recyclerview:recyclerview:1.0.0' |
|
||||
compileOnly 'androidx.legacy:legacy-support-v4:1.0.0' |
|
||||
compileOnly 'androidx.appcompat:appcompat:1.0.0' |
|
||||
compileOnly 'com.alibaba:fastjson:1.1.46.android' |
|
||||
|
|
||||
compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar']) |
|
||||
|
|
||||
compileOnly 'com.alibaba:fastjson:1.1.46.android' |
|
||||
|
|
||||
implementation 'com.tencent.iot.hub:hub-device-android:3.3.5' |
|
||||
|
|
||||
} |
|
@ -1,23 +0,0 @@ |
|||||
# Add project specific ProGuard rules here. |
|
||||
# You can control the set of applied configuration files using the |
|
||||
# proguardFiles setting in build.gradle. |
|
||||
# |
|
||||
# For more details, see |
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html |
|
||||
|
|
||||
# If your project uses WebView with JS, uncomment the following |
|
||||
# and specify the fully qualified class name to the JavaScript interface |
|
||||
# class: |
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
|
||||
# public *; |
|
||||
#} |
|
||||
|
|
||||
# Uncomment this to preserve the line number information for |
|
||||
# debugging stack traces. |
|
||||
#-keepattributes SourceFile,LineNumberTable |
|
||||
|
|
||||
# If you keep the line number information, uncomment this to |
|
||||
# hide the original source file name. |
|
||||
#-renamesourcefileattribute SourceFile |
|
||||
|
|
||||
-keep public class * extends io.dcloud.feature.uniapp.common.UniModule{*;} |
|
@ -1,26 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
import android.content.Context; |
|
||||
|
|
||||
import androidx.test.platform.app.InstrumentationRegistry; |
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4; |
|
||||
|
|
||||
import org.junit.Test; |
|
||||
import org.junit.runner.RunWith; |
|
||||
|
|
||||
import static org.junit.Assert.*; |
|
||||
|
|
||||
/** |
|
||||
* Instrumented test, which will execute on an Android device. |
|
||||
* |
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|
||||
*/ |
|
||||
@RunWith(AndroidJUnit4.class) |
|
||||
public class ExampleInstrumentedTest { |
|
||||
@Test |
|
||||
public void useAppContext() { |
|
||||
// Context of the app under test. |
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); |
|
||||
assertEquals("io.dcloud.zmt_module.test", appContext.getPackageName()); |
|
||||
} |
|
||||
} |
|
@ -1,5 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|
||||
package="io.dcloud.zmt_module"> |
|
||||
|
|
||||
</manifest> |
|
@ -1,43 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
public class MyThread extends Thread { |
|
||||
String TAG = "zmt---"; |
|
||||
public void run(){ |
|
||||
System.out.println("MyThread thread running..."); |
|
||||
|
|
||||
TcpServer server = new TcpServer(); |
|
||||
server.initSocket((Integer.parseInt("16666"))); |
|
||||
|
|
||||
while (true){ |
|
||||
String message = server.receiveMessage(SocketConfig.UTF_8); |
|
||||
System.out.println(TAG+"接收消息:"+message); |
|
||||
|
|
||||
String send_msg = "收到消息了,你说的对!"; |
|
||||
|
|
||||
send_msg = SocketHelper.getMessageByReadLine(send_msg); |
|
||||
server.sendMessage(send_msg,SocketConfig.UTF_8); |
|
||||
try { |
|
||||
Thread.sleep(1000); |
|
||||
} catch (InterruptedException e) { |
|
||||
e.printStackTrace(); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
// while (true){ |
|
||||
// String message = server.receiveMessage(SocketConfig.UTF_8); |
|
||||
// System.out.println(TAG+"接收消息:"+message); |
|
||||
// |
|
||||
// String send_msg = "101010"; |
|
||||
// |
|
||||
// send_msg = SocketHelper.getMessageByReadLine(send_msg); |
|
||||
// server.sendMessage(send_msg,SocketConfig.UTF_8); |
|
||||
// try { |
|
||||
// Thread.sleep(1000); |
|
||||
// } catch (InterruptedException e) { |
|
||||
// e.printStackTrace(); |
|
||||
// } |
|
||||
// |
|
||||
// } |
|
||||
} |
|
||||
} |
|
@ -1,8 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
public class SocketConfig { |
|
||||
|
|
||||
// 设置编码 |
|
||||
public static final String UTF_8 = "UTF-8"; |
|
||||
public static final String GBK = "GBK"; |
|
||||
} |
|
@ -1,53 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
import java.io.ByteArrayOutputStream; |
|
||||
import java.io.IOException; |
|
||||
import java.io.InputStream; |
|
||||
import java.util.Arrays; |
|
||||
|
|
||||
public class SocketHelper { |
|
||||
public static String getMessageByReadLine(String message) { |
|
||||
message = message + "\n"; |
|
||||
return message; |
|
||||
} |
|
||||
|
|
||||
public static byte[] toByteArray(InputStream in) throws IOException { |
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(); |
|
||||
byte[] buffer = new byte[1024 * 4]; |
|
||||
int n = 0; |
|
||||
while ((n = in.read(buffer)) != -1) { |
|
||||
out.write(buffer, 0, n); |
|
||||
} |
|
||||
return out.toByteArray(); |
|
||||
} |
|
||||
|
|
||||
public static byte[] toIntByteArray(InputStream in) throws IOException { |
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream(); |
|
||||
byte[] buffer = new byte[100]; |
|
||||
|
|
||||
System.out.println("zmt-toIntByteArray--" + buffer[0] + buffer[1] + buffer[2] + buffer[3] + buffer[4] + buffer[5] + " " + Arrays.toString(buffer)); |
|
||||
int n = 0; |
|
||||
while ((n = in.read(buffer)) != -1) { |
|
||||
out.write(buffer, 0, n); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
return out.toByteArray(); |
|
||||
} |
|
||||
|
|
||||
public static String byte2hex(byte[] bytes) { |
|
||||
StringBuilder sb = new StringBuilder(); |
|
||||
String tmp = null; |
|
||||
for (byte b : bytes) { |
|
||||
//将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制 |
|
||||
tmp = Integer.toHexString(0xFF & b); |
|
||||
if (tmp.length() == 1) { |
|
||||
tmp = "0" + tmp; |
|
||||
} |
|
||||
sb.append(tmp); |
|
||||
|
|
||||
} |
|
||||
return sb.toString(); |
|
||||
} |
|
||||
|
|
||||
} |
|
@ -1,193 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
import android.content.Context; |
|
||||
import android.net.ConnectivityManager; |
|
||||
import android.net.NetworkInfo; |
|
||||
|
|
||||
import java.io.BufferedInputStream; |
|
||||
import java.io.BufferedReader; |
|
||||
import java.io.IOException; |
|
||||
import java.io.InputStream; |
|
||||
import java.io.InputStreamReader; |
|
||||
import java.io.OutputStream; |
|
||||
import java.io.OutputStreamWriter; |
|
||||
import java.io.PrintStream; |
|
||||
import java.io.PrintWriter; |
|
||||
import java.net.Inet4Address; |
|
||||
import java.net.InetAddress; |
|
||||
import java.net.NetworkInterface; |
|
||||
import java.net.ServerSocket; |
|
||||
import java.net.Socket; |
|
||||
import java.net.SocketException; |
|
||||
import java.nio.charset.Charset; |
|
||||
import java.util.Arrays; |
|
||||
import java.util.Enumeration; |
|
||||
|
|
||||
public class TcpServer { |
|
||||
// 私有变量 |
|
||||
private String TAG = "zmt---"; |
|
||||
private ServerSocket mServerSocket; |
|
||||
// private DatagramSocket mServerSocket; |
|
||||
private Socket mServer; |
|
||||
|
|
||||
private OutputStream mOutStream; |
|
||||
private PrintWriter mPrinter; |
|
||||
|
|
||||
private InputStream mInputStream; |
|
||||
private BufferedInputStream mBufferedInputStream; |
|
||||
private InputStreamReader mInputStreamReader; |
|
||||
private BufferedReader mBufferedReader; |
|
||||
|
|
||||
/** |
|
||||
*使用本机ip 建立socket server |
|
||||
* @param port 端口号:0-65535 |
|
||||
* |
|
||||
*/ |
|
||||
public void initSocket(int port){ |
|
||||
System.out.println(TAG+"initSocket"); |
|
||||
try{ |
|
||||
if (mServerSocket != null) { mServerSocket.close(); mServerSocket = null; } |
|
||||
|
|
||||
if (mServerSocket==null){ |
|
||||
mServerSocket = new ServerSocket(port); |
|
||||
mServerSocket.setReuseAddress(true); |
|
||||
|
|
||||
// mServerSocket.bind(new InetSocketAddress(port)); |
|
||||
InetAddress inetAddress = InetAddress.getLocalHost(); //本机地址 |
|
||||
System.out.println(TAG+"tcp server 建立完成:host name"+inetAddress.getHostName()+"\n ---host address:" + |
|
||||
inetAddress.getHostAddress()+" , address:"+inetAddress.getAddress().toString()+" 端口:"+port+ "----"+getIPAddressForNetwork()); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
// if(mServerSocket==null){ |
|
||||
// //自己IP收信 |
|
||||
//// IPAddress ip = IPAddress.Parse("192.168.1.96"); |
|
||||
// |
|
||||
//// String ip = "192.168.1.96"; |
|
||||
// InetAddress ip = InetAddress.getByName("192.168.1.96"); |
|
||||
// |
|
||||
// mServerSocket = new ServerSocket(port); |
|
||||
// mServerSocket.bind(new IPEndPoint(ip,port)); |
|
||||
// |
|
||||
// Socket mServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); |
|
||||
// m_serverListenSocket.Bind(new IPEndPoint(ip, 10035)); |
|
||||
// m_serverListenSocket.Listen(100); |
|
||||
// } |
|
||||
}catch (IOException e){ |
|
||||
e.printStackTrace(); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
private String getIPAddressForNetwork() throws SocketException { |
|
||||
String address = null; |
|
||||
for(Enumeration<NetworkInterface> enum1 = NetworkInterface.getNetworkInterfaces(); enum1.hasMoreElements();){ |
|
||||
NetworkInterface networkInterface = enum1.nextElement(); |
|
||||
for(Enumeration<InetAddress> enum2=networkInterface.getInetAddresses(); enum2.hasMoreElements();){ |
|
||||
InetAddress inetAddress = enum2.nextElement(); |
|
||||
if(!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address){ |
|
||||
address = "type: 手机网络\n本机IP: " + inetAddress.getHostAddress().toString(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
return address; |
|
||||
} |
|
||||
|
|
||||
// 接收消息 |
|
||||
public String receiveMessage(String charsetName){ |
|
||||
String receiveData=null; |
|
||||
String readLine=null; |
|
||||
|
|
||||
// if(mServerSocket==null){ |
|
||||
// System.out.println(TAG+"Socket 未启动"); |
|
||||
// return null; |
|
||||
// } |
|
||||
System.out.println(TAG+"tcp server receiveMessage ing..."); |
|
||||
try{ |
|
||||
System.out.println("mServerSocket:"+mServerSocket.toString()); |
|
||||
// 获取输入信息 |
|
||||
// if(mServerSocket==null){ |
|
||||
// System.out.println("mServerSocket 未初始化,无法receiveMessage"); |
|
||||
// return null; |
|
||||
// } |
|
||||
mServer = mServerSocket.accept(); |
|
||||
mInputStream = mServer.getInputStream(); |
|
||||
|
|
||||
byte[] data = SocketHelper.toByteArray(mInputStream); |
|
||||
|
|
||||
// String _rs = new String(data, "gbk"); |
|
||||
|
|
||||
// System.out.println(TAG+"二进制读取结果:"+data+" - "+_rs +" - "+SocketHelper.toIntByteArray(mInputStream) + Arrays.toString(data)) ; |
|
||||
|
|
||||
System.out.println(TAG+SocketHelper.byte2hex(data)); |
|
||||
receiveData = SocketHelper.byte2hex(data); |
|
||||
// 读取输入流 |
|
||||
// charsetName = null; |
|
||||
// if(charsetName!=null&&charsetName!=""){ |
|
||||
// mInputStreamReader = new InputStreamReader(mInputStream, Charset.forName(charsetName)); |
|
||||
// }else{ |
|
||||
// mInputStreamReader = new InputStreamReader(mInputStream); |
|
||||
// } |
|
||||
|
|
||||
// mBufferedReader = new BufferedReader(mInputStreamReader); |
|
||||
// readLine = mBufferedReader.readLine(); |
|
||||
// while (readLine!=null&&readLine!=""){ |
|
||||
// System.out.println(TAG+"读取结果:"+readLine); |
|
||||
// break; |
|
||||
// } |
|
||||
System.out.println(TAG+"接收结束,数据:"+receiveData); |
|
||||
|
|
||||
} catch (IOException e) { |
|
||||
e.printStackTrace(); |
|
||||
} |
|
||||
return receiveData; |
|
||||
|
|
||||
} |
|
||||
|
|
||||
// 发送消息 |
|
||||
public void sendMessage(String message,String charsetName){ |
|
||||
if(mServer != null){ |
|
||||
System.out.println(TAG+"sendMessage ing..."); |
|
||||
|
|
||||
try { |
|
||||
mOutStream = mServer.getOutputStream(); |
|
||||
mPrinter = new PrintWriter(new OutputStreamWriter(mOutStream,Charset.forName(charsetName))); |
|
||||
mPrinter.println(message); |
|
||||
mPrinter.flush(); |
|
||||
|
|
||||
System.out.println(TAG+"发送成功 :"+message); |
|
||||
} catch (IOException e) { |
|
||||
System.out.println(TAG+"tcp server sendMessage err :"+message); |
|
||||
e.printStackTrace(); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 关闭连接 |
|
||||
public void close(){ |
|
||||
try { |
|
||||
if (mPrinter!=null){ |
|
||||
mPrinter.close(); |
|
||||
} |
|
||||
if (mOutStream!=null){ |
|
||||
mOutStream.close(); |
|
||||
} |
|
||||
if (mInputStream!=null){ |
|
||||
mInputStream.close(); |
|
||||
} |
|
||||
if (mInputStreamReader!=null){ |
|
||||
mInputStreamReader.close(); |
|
||||
} |
|
||||
if (mBufferedReader!=null){ |
|
||||
mBufferedReader.close(); |
|
||||
} |
|
||||
if (mServer!=null){ |
|
||||
mServer.close(); |
|
||||
} |
|
||||
System.out.println(TAG+"关闭tcp server <------"); |
|
||||
} catch (IOException e) { |
|
||||
e.printStackTrace(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -1,189 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
import android.app.Application; |
|
||||
import android.content.Context; |
|
||||
import android.content.SharedPreferences; |
|
||||
import android.util.Log; |
|
||||
|
|
||||
import com.tencent.iot.hub.device.android.core.gateway.TXGatewayConnection; |
|
||||
import com.tencent.iot.hub.device.android.core.util.TXLog; |
|
||||
import com.tencent.iot.hub.device.java.core.common.Status; |
|
||||
import com.tencent.iot.hub.device.java.core.mqtt.TXMqttActionCallBack; |
|
||||
|
|
||||
import org.eclipse.paho.client.mqttv3.IMqttToken; |
|
||||
import org.eclipse.paho.client.mqttv3.MqttMessage; |
|
||||
|
|
||||
import java.util.Arrays; |
|
||||
|
|
||||
import io.dcloud.feature.uniapp.UniAppHookProxy; |
|
||||
import io.dcloud.zmt_module.mqtt.MQTTRequest; |
|
||||
import io.dcloud.zmt_module.mqtt.MQTTSample; |
|
||||
|
|
||||
public class Zmt_AppProxy implements UniAppHookProxy { |
|
||||
|
|
||||
String TAG = "zmt proxy"; |
|
||||
|
|
||||
private MQTTSample mMQTTSample; |
|
||||
|
|
||||
|
|
||||
|
|
||||
// Default testing parameters |
|
||||
private String mBrokerURL = null; //传入null,即使用腾讯云物联网通信默认地址 "${ProductId}.iotcloud.tencentdevices.com:8883" https://cloud.tencent.com/document/product/634/32546 |
|
||||
private String mProductID = ""; |
|
||||
private String mDevName = ""; |
|
||||
private String mDevPSK = ""; |
|
||||
private String mSubProductID = ""; // If you wont test gateway, let this to be null |
|
||||
private String mSubDevName = ""; |
|
||||
private String mSubDevPsk = ""; |
|
||||
private String mTestTopic = ""; // productID/DeviceName/TopicName |
|
||||
// private String mDevCertName = "YOUR_DEVICE_NAME_cert.crt"; |
|
||||
// private String mDevKeyName = "YOUR_DEVICE_NAME_private.key"; |
|
||||
// private String mProductKey = BuildConfig.PRODUCT_KEY; // Used for dynamic register |
|
||||
private String mDevCert = ""; // Cert String |
|
||||
private String mDevPriv = ""; // Priv String |
|
||||
|
|
||||
private final static String BROKER_URL = "broker_url"; |
|
||||
private final static String PRODUCT_ID = "product_id"; |
|
||||
private final static String DEVICE_NAME = "dev_name"; |
|
||||
private final static String DEVICE_PSK = "dev_psk"; |
|
||||
private final static String SUB_PRODUCID = "sub_prodid"; |
|
||||
private final static String SUB_DEVNAME = "sub_devname"; |
|
||||
private final static String TEST_TOPIC = "test_topic"; |
|
||||
|
|
||||
private final static String DEVICE_CERT = "dev_cert"; |
|
||||
private final static String DEVICE_PRIV = "dev_priv"; |
|
||||
private final static String PRODUCT_KEY = "product_key"; |
|
||||
private final static String SUB_DEVICE_PSK = "sub_dev_psk"; |
|
||||
|
|
||||
private volatile boolean mIsConnected; |
|
||||
|
|
||||
@Override |
|
||||
public void onCreate(Application application) { |
|
||||
|
|
||||
|
|
||||
Log.e(TAG, "testAsyncFunc--zmt:onCreate"); |
|
||||
//当前uni应用进程回调 仅触发一次 多进程不会触发 |
|
||||
//可通过UniSDKEngine注册UniModule或者UniComponent |
|
||||
|
|
||||
Context mContext = application.getBaseContext(); |
|
||||
|
|
||||
Object mBrokerURL; |
|
||||
// mMqttConnection = new TXGatewayConnection(mContext, mBrokerURL, mProductID, mDevName, mDevPSK,null,null ,mMqttLogFlag, mMqttLogCallBack, mMqttActionCallBack); |
|
||||
// mMqttConnection.connect(options, mqttRequest); |
|
||||
|
|
||||
// SharedPreferences settings = mParent.getSharedPreferences("config", Context.MODE_PRIVATE); |
|
||||
mBrokerURL =null; |
|
||||
mProductID = "BE8N7UZ7OF"; |
|
||||
mDevName = "pad20220105"; |
|
||||
mDevPSK = "7udrYcfTVThbzdMlLT9fHQ=="; |
|
||||
|
|
||||
mSubProductID = ""; |
|
||||
mSubDevName = ""; |
|
||||
mSubDevPsk =""; |
|
||||
mTestTopic = "BE8N7UZ7OF/pad20220105/data"; |
|
||||
mDevCert = ""; |
|
||||
mDevPriv = ""; |
|
||||
|
|
||||
// mMQTTSample = new MQTTSample(mContext, new SelfMqttActionCallBack(), null, mProductID, mDevName, mDevPSK, |
|
||||
// mDevCert, mDevPriv, mSubProductID, mSubDevName, mTestTopic, null, null, true, null); |
|
||||
// mMQTTSample.setSubDevPsk(mSubDevPsk); |
|
||||
// mMQTTSample.connect(); |
|
||||
|
|
||||
|
|
||||
// MyThread mt = new MyThread(); |
|
||||
// mt.run(); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onSubProcessCreate(Application application) { |
|
||||
Log.e(TAG, "testAsyncFunc--zmt:onSubProcessCreate"); |
|
||||
//其他子进程初始化回调 可用于初始化需要子进程初始化需要的逻辑 |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 实现TXMqttActionCallBack回调接口 |
|
||||
*/ |
|
||||
private class SelfMqttActionCallBack extends TXMqttActionCallBack { |
|
||||
|
|
||||
@Override |
|
||||
public void onConnectCompleted(Status status, boolean reconnect, Object userContext, String msg, Throwable cause) { |
|
||||
String userContextInfo = ""; |
|
||||
if (userContext instanceof MQTTRequest) { |
|
||||
userContextInfo = userContext.toString(); |
|
||||
} |
|
||||
String logInfo = String.format("我在uni里链接成功了!onConnectCompleted, status[%s], reconnect[%b], userContext[%s], msg[%s]", |
|
||||
status.name(), reconnect, userContextInfo, msg); |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText, TXLog.LEVEL_INFO); |
|
||||
|
|
||||
System.out.println(TAG+logInfo); |
|
||||
mIsConnected = true; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onConnectionLost(Throwable cause) { |
|
||||
String logInfo = String.format("onConnectionLost, cause[%s]", cause.toString()); |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText, TXLog.LEVEL_INFO); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDisconnectCompleted(Status status, Object userContext, String msg, Throwable cause) { |
|
||||
String userContextInfo = ""; |
|
||||
if (userContext instanceof MQTTRequest) { |
|
||||
userContextInfo = userContext.toString(); |
|
||||
} |
|
||||
String logInfo = String.format("onDisconnectCompleted, status[%s], userContext[%s], msg[%s]", status.name(), userContextInfo, msg); |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText, TXLog.LEVEL_INFO); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
mIsConnected = false; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onPublishCompleted(Status status, IMqttToken token, Object userContext, String errMsg, Throwable cause) { |
|
||||
String userContextInfo = ""; |
|
||||
if (userContext instanceof MQTTRequest) { |
|
||||
userContextInfo = userContext.toString(); |
|
||||
} |
|
||||
String logInfo = String.format("onPublishCompleted, status[%s], topics[%s], userContext[%s], errMsg[%s]", |
|
||||
status.name(), Arrays.toString(token.getTopics()), userContextInfo, errMsg); |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onSubscribeCompleted(Status status, IMqttToken asyncActionToken, Object userContext, String errMsg, Throwable cause) { |
|
||||
String userContextInfo = ""; |
|
||||
if (userContext instanceof MQTTRequest) { |
|
||||
userContextInfo = userContext.toString(); |
|
||||
} |
|
||||
String logInfo = String.format("onSubscribeCompleted, status[%s], topics[%s], userContext[%s], errMsg[%s]", |
|
||||
status.name(), Arrays.toString(asyncActionToken.getTopics()), userContextInfo, errMsg); |
|
||||
if (Status.ERROR == status) { |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText, TXLog.LEVEL_ERROR); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
} else { |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onUnSubscribeCompleted(Status status, IMqttToken asyncActionToken, Object userContext, String errMsg, Throwable cause) { |
|
||||
String userContextInfo = ""; |
|
||||
if (userContext instanceof MQTTRequest) { |
|
||||
userContextInfo = userContext.toString(); |
|
||||
} |
|
||||
String logInfo = String.format("onUnSubscribeCompleted, status[%s], topics[%s], userContext[%s], errMsg[%s]", |
|
||||
status.name(), Arrays.toString(asyncActionToken.getTopics()), userContextInfo, errMsg); |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onMessageReceived(final String topic, final MqttMessage message) { |
|
||||
String logInfo = String.format("receive command, topic[%s], message[%s]", topic, message.toString()); |
|
||||
// mParent.printLogInfo(TAG, logInfo, mLogInfoText); |
|
||||
System.out.println(TAG+logInfo); |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -1,49 +0,0 @@ |
|||||
package io.dcloud.zmt_module.mqtt; |
|
||||
|
|
||||
|
|
||||
public class MQTTRequest { |
|
||||
|
|
||||
private static final String TAG = MQTTRequest.class.getSimpleName(); |
|
||||
|
|
||||
/** |
|
||||
* 请求类型 |
|
||||
*/ |
|
||||
private String requestType = ""; |
|
||||
|
|
||||
/** |
|
||||
* 请求ID |
|
||||
*/ |
|
||||
private int requestId = 0; |
|
||||
|
|
||||
public MQTTRequest() { |
|
||||
} |
|
||||
|
|
||||
public MQTTRequest(String requestType, int requestId) { |
|
||||
this.requestType = requestType; |
|
||||
this.requestId = requestId; |
|
||||
} |
|
||||
|
|
||||
public String getRequestType() { |
|
||||
return requestType; |
|
||||
} |
|
||||
|
|
||||
public void setRequestType(String requestType) { |
|
||||
this.requestType = requestType; |
|
||||
} |
|
||||
|
|
||||
public int getRequestId() { |
|
||||
return requestId; |
|
||||
} |
|
||||
|
|
||||
public void setRequestId(int requestId) { |
|
||||
this.requestId = requestId; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public String toString() { |
|
||||
return "MQTTRequest{" + |
|
||||
"requestType='" + requestType + '\'' + |
|
||||
", requestId=" + requestId + |
|
||||
'}'; |
|
||||
} |
|
||||
} |
|
@ -1,402 +0,0 @@ |
|||||
package io.dcloud.zmt_module.mqtt; |
|
||||
|
|
||||
import android.content.Context; |
|
||||
import android.os.Environment; |
|
||||
import android.util.Log; |
|
||||
|
|
||||
import com.tencent.iot.hub.device.android.core.gateway.TXGatewayConnection; |
|
||||
import com.tencent.iot.hub.device.android.core.util.AsymcSslUtils; |
|
||||
import com.tencent.iot.hub.device.android.core.util.TXLog; |
|
||||
import com.tencent.iot.hub.device.java.core.log.TXMqttLogCallBack; |
|
||||
import com.tencent.iot.hub.device.java.core.mqtt.TXMqttActionCallBack; |
|
||||
import com.tencent.iot.hub.device.java.core.mqtt.TXMqttConstants; |
|
||||
import com.tencent.iot.hub.device.java.core.mqtt.TXOTACallBack; |
|
||||
import com.tencent.iot.hub.device.java.core.mqtt.TXOTAConstansts; |
|
||||
|
|
||||
import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions; |
|
||||
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; |
|
||||
import org.eclipse.paho.client.mqttv3.MqttMessage; |
|
||||
import org.json.JSONException; |
|
||||
import org.json.JSONObject; |
|
||||
|
|
||||
import java.io.ByteArrayInputStream; |
|
||||
import java.util.Map; |
|
||||
import java.util.concurrent.atomic.AtomicInteger; |
|
||||
|
|
||||
public class MQTTSample { |
|
||||
|
|
||||
private static final String TAG = "TXMQTT"; |
|
||||
// Default Value, should be changed in testing |
|
||||
private String mBrokerURL = null; //传入null,即使用腾讯云物联网通信默认地址 "${ProductId}.iotcloud.tencentdevices.com:8883" https://cloud.tencent.com/document/product/634/32546 |
|
||||
private String mProductID = "PRODUCT-ID"; |
|
||||
private String mDevName = "DEVICE-NAME"; |
|
||||
private String mDevPSK = "DEVICE-SECRET"; |
|
||||
|
|
||||
private String mDevCertName = "DEVICE_CERT-NAME "; |
|
||||
private String mDevKeyName = "DEVICE_KEY-NAME "; |
|
||||
|
|
||||
private String mSubProductID = "SUBDEV_PRODUCT-ID"; |
|
||||
private String mSubDevName = "SUBDEV_DEV-NAME"; |
|
||||
private String mSubDevPsk = "SUBDEV_DEVICE-SECRET"; |
|
||||
private String mTestTopic = "TEST_TOPIC_WITH_SUB_PUB"; |
|
||||
private String mDevCert; |
|
||||
private String mDevPriv; |
|
||||
|
|
||||
private boolean mMqttLogFlag; |
|
||||
private TXMqttLogCallBack mMqttLogCallBack; |
|
||||
|
|
||||
private Context mContext; |
|
||||
private String path2Store = ""; |
|
||||
|
|
||||
private TXMqttActionCallBack mMqttActionCallBack; |
|
||||
|
|
||||
/** |
|
||||
* MQTT连接实例 |
|
||||
*/ |
|
||||
private TXGatewayConnection mMqttConnection; |
|
||||
|
|
||||
/** |
|
||||
* 请求ID |
|
||||
*/ |
|
||||
private static AtomicInteger requestID = new AtomicInteger(0); |
|
||||
|
|
||||
public MQTTSample(Context context, TXMqttLogCallBack logCallBack, TXMqttActionCallBack callBack) { |
|
||||
mContext = context; |
|
||||
mMqttActionCallBack = callBack; |
|
||||
} |
|
||||
|
|
||||
public MQTTSample(Context context, TXMqttActionCallBack callBack, String brokerURL, String productId, |
|
||||
String devName, String devPSK, String subProductID, String subDevName, String testTopic, String devCertName, String devKeyName, |
|
||||
Boolean mqttLogFlag, TXMqttLogCallBack logCallBack) { |
|
||||
mBrokerURL = brokerURL; |
|
||||
mProductID = productId; |
|
||||
mDevName = devName; |
|
||||
mDevPSK = devPSK; |
|
||||
mSubProductID = subProductID; |
|
||||
mSubDevName = subDevName; |
|
||||
mTestTopic = testTopic; |
|
||||
mDevCertName = devCertName; |
|
||||
mDevKeyName = devKeyName; |
|
||||
|
|
||||
mMqttLogFlag = mqttLogFlag; |
|
||||
mMqttLogCallBack = logCallBack; |
|
||||
|
|
||||
mContext = context; |
|
||||
mMqttActionCallBack = callBack; |
|
||||
} |
|
||||
|
|
||||
public MQTTSample(Context context, TXMqttActionCallBack callBack, String brokerURL, String productId, |
|
||||
String devName, String devPsk, String devCert, String devPriv, String subProductID, String subDevName, String testTopic, String devCertName, String devKeyName, |
|
||||
Boolean mqttLogFlag, TXMqttLogCallBack logCallBack) { |
|
||||
mBrokerURL = brokerURL; |
|
||||
mProductID = productId; |
|
||||
mDevName = devName; |
|
||||
mDevPSK = devPsk; |
|
||||
mDevCert = devCert; |
|
||||
mDevPriv = devPriv; |
|
||||
mSubProductID = subProductID; |
|
||||
mSubDevName = subDevName; |
|
||||
mTestTopic = testTopic; |
|
||||
mDevCertName = devCertName; |
|
||||
mDevKeyName = devKeyName; |
|
||||
|
|
||||
mMqttLogFlag = mqttLogFlag; |
|
||||
mMqttLogCallBack = logCallBack; |
|
||||
|
|
||||
mContext = context; |
|
||||
mMqttActionCallBack = callBack; |
|
||||
path2Store = mContext.getCacheDir().getAbsolutePath(); |
|
||||
} |
|
||||
|
|
||||
public MQTTSample(Context context, TXMqttActionCallBack callBack, String brokerURL, String productId, |
|
||||
String devName, String devPsk, String devCert, String devPriv, String subProductID, String subDevName, String subDevPsk, String testTopic, String devCertName, String devKeyName, |
|
||||
Boolean mqttLogFlag, TXMqttLogCallBack logCallBack) { |
|
||||
this(context, callBack, brokerURL, productId, devName, devPsk, devCert, devPriv, subProductID, subDevName, testTopic, devCertName, devKeyName, mqttLogFlag, logCallBack); |
|
||||
mSubDevPsk = subDevPsk; |
|
||||
} |
|
||||
|
|
||||
public void setSubDevPsk(String val) { |
|
||||
mSubDevPsk = val; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
public MQTTSample(Context context, TXMqttActionCallBack callBack, String brokerURL, String productId, |
|
||||
String devName, String devPSK, String subProductID, String subDevName, String testTopic) { |
|
||||
mBrokerURL = brokerURL; |
|
||||
mProductID = productId; |
|
||||
mDevName = devName; |
|
||||
mDevPSK = devPSK; |
|
||||
mSubProductID = subProductID; |
|
||||
mSubDevName = subDevName; |
|
||||
mTestTopic = testTopic; |
|
||||
|
|
||||
mContext = context; |
|
||||
mMqttActionCallBack = callBack; |
|
||||
} |
|
||||
|
|
||||
private TXOTACallBack oTACallBack = new TXOTACallBack() { |
|
||||
|
|
||||
@Override |
|
||||
public void onReportFirmwareVersion(int resultCode, String version, String resultMsg) { |
|
||||
|
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public boolean onLastestFirmwareReady(String url, String md5, String version) { |
|
||||
System.out.println("onLastestFirmwareReady url=" + url + " version " + version); |
|
||||
mMqttConnection.gatewayDownSubdevApp(url, path2Store + "/" + md5, md5, version); |
|
||||
return true; // false 自动触发下载升级文件 true 需要手动触发下载升级文件 |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDownloadProgress(int percent, String version) { |
|
||||
mMqttConnection.gatewaySubdevReportProgress(percent, version); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDownloadCompleted(String outputFile, String version) { |
|
||||
mMqttConnection.gatewaySubdevReportStart(version); |
|
||||
mMqttConnection.gatewaySubdevReportSuccess(version); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDownloadFailure(int errCode, String version) { |
|
||||
mMqttConnection.gatewaySubdevReportFail(errCode, "", version); |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
/** |
|
||||
* 建立MQTT连接 |
|
||||
*/ |
|
||||
public void connect() { |
|
||||
mMqttConnection = new TXGatewayConnection(mContext, mBrokerURL, mProductID, mDevName, mDevPSK,null,null ,mMqttLogFlag, mMqttLogCallBack, mMqttActionCallBack); |
|
||||
mMqttConnection.setSubDevName(mSubDevName); |
|
||||
mMqttConnection.setSubDevProductKey(mSubDevPsk); |
|
||||
mMqttConnection.setSubProductID(mSubProductID); |
|
||||
MqttConnectOptions options = new MqttConnectOptions(); |
|
||||
options.setConnectionTimeout(8); |
|
||||
options.setKeepAliveInterval(240); |
|
||||
options.setAutomaticReconnect(true); |
|
||||
|
|
||||
if (mDevPriv != null && mDevCert != null && mDevPriv.length() != 0 && mDevCert.length() != 0) { |
|
||||
TXLog.i(TAG, "Using cert stream " + mDevPriv + " " + mDevCert); |
|
||||
options.setSocketFactory(AsymcSslUtils.getSocketFactoryByStream(new ByteArrayInputStream(mDevCert.getBytes()), new ByteArrayInputStream(mDevPriv.getBytes()))); |
|
||||
} else if (mDevPSK != null && mDevPSK.length() != 0){ |
|
||||
TXLog.i(TAG, "Using PSK"); |
|
||||
// options.setSocketFactory(AsymcSslUtils.getSocketFactory()); 如果您使用的是3.3.0及以下版本的 hub-device-android sdk,由于密钥认证默认配置的ssl://的url,请添加此句setSocketFactory配置。 |
|
||||
} else { |
|
||||
TXLog.i(TAG, "Using cert assets file"); |
|
||||
options.setSocketFactory(AsymcSslUtils.getSocketFactoryByAssetsFile(mContext, mDevCertName, mDevKeyName)); |
|
||||
} |
|
||||
|
|
||||
MQTTRequest mqttRequest = new MQTTRequest("connect", requestID.getAndIncrement()); |
|
||||
mMqttConnection.connect(options, mqttRequest); |
|
||||
|
|
||||
DisconnectedBufferOptions bufferOptions = new DisconnectedBufferOptions(); |
|
||||
bufferOptions.setBufferEnabled(true); |
|
||||
bufferOptions.setBufferSize(1024); |
|
||||
bufferOptions.setDeleteOldestMessages(true); |
|
||||
mMqttConnection.setBufferOpts(bufferOptions); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 断开MQTT连接 |
|
||||
*/ |
|
||||
public void disconnect() { |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("disconnect", requestID.getAndIncrement()); |
|
||||
mMqttConnection.disConnect(mqttRequest); |
|
||||
} |
|
||||
|
|
||||
public void setSubdevOnline() { |
|
||||
// set subdev online |
|
||||
mMqttConnection.gatewaySubdevOnline(mSubProductID, mSubDevName); |
|
||||
} |
|
||||
|
|
||||
public void setSubDevOffline() { |
|
||||
mMqttConnection.gatewaySubdevOffline(mSubProductID, mSubDevName); |
|
||||
} |
|
||||
|
|
||||
public void setSubDevBinded() { |
|
||||
mMqttConnection.gatewayBindSubdev(mSubProductID, mSubDevName, mSubDevPsk); |
|
||||
} |
|
||||
|
|
||||
public void setSubDevUnbinded() { |
|
||||
mMqttConnection.gatewayUnbindSubdev(mSubProductID, mSubDevName); |
|
||||
} |
|
||||
|
|
||||
public void checkSubdevRelation() { |
|
||||
mMqttConnection.getGatewaySubdevRealtion(); |
|
||||
} |
|
||||
|
|
||||
public void getRemoteConfig() { |
|
||||
mMqttConnection.getRemoteConfig(); |
|
||||
} |
|
||||
|
|
||||
public void concernRemoteConfig() { |
|
||||
mMqttConnection.concernConfig(); |
|
||||
} |
|
||||
|
|
||||
public void reportSubDevVersion(String version) { |
|
||||
mMqttConnection.gatewaySubdevReportVer(version); |
|
||||
} |
|
||||
|
|
||||
public void subscribeNTPTopic() { |
|
||||
// QOS等级 |
|
||||
int qos = TXMqttConstants.QOS1; |
|
||||
// 用户上下文(请求实例) |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("subscribeNTPTopic", requestID.getAndIncrement()); |
|
||||
mMqttConnection.subscribeNTPTopic(qos, mqttRequest); |
|
||||
} |
|
||||
|
|
||||
public void getNTPService() { |
|
||||
mMqttConnection.getNTPService(); |
|
||||
} |
|
||||
|
|
||||
public void initOTA() { |
|
||||
TXLog.e(TAG, "path2Store " + path2Store); |
|
||||
mMqttConnection.initOTA(path2Store, oTACallBack); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 订阅广播主题 |
|
||||
*/ |
|
||||
public void subscribeBroadCastTopic() { |
|
||||
// 用户上下文(请求实例) |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("subscribeTopic", requestID.getAndIncrement()); |
|
||||
// 订阅广播主题 |
|
||||
mMqttConnection.subscribeBroadcastTopic(TXMqttConstants.QOS1, mqttRequest); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 订阅主题 |
|
||||
* |
|
||||
*/ |
|
||||
public void subscribeTopic() { |
|
||||
// 主题 |
|
||||
String topic = mTestTopic; |
|
||||
// QOS等级 |
|
||||
int qos = TXMqttConstants.QOS1; |
|
||||
// 用户上下文(请求实例) |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("subscribeTopic", requestID.getAndIncrement()); |
|
||||
|
|
||||
Log.d(TAG, "sub topic is " + topic); |
|
||||
|
|
||||
// 订阅主题 |
|
||||
mMqttConnection.subscribe(topic, qos, mqttRequest); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 取消订阅主题 |
|
||||
* |
|
||||
*/ |
|
||||
public void unSubscribeTopic() { |
|
||||
// 主题 |
|
||||
String topic = mTestTopic; |
|
||||
// 用户上下文(请求实例) |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("unSubscribeTopic", requestID.getAndIncrement()); |
|
||||
Log.d(TAG, "Start to unSubscribe" + topic); |
|
||||
// 取消订阅主题 |
|
||||
mMqttConnection.unSubscribe(topic, mqttRequest); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 发布主题 |
|
||||
*/ |
|
||||
public void publishTopic(String topicName, Map<String, String> data) { |
|
||||
// 主题 |
|
||||
String topic = mTestTopic; |
|
||||
// MQTT消息 |
|
||||
MqttMessage message = new MqttMessage(); |
|
||||
|
|
||||
JSONObject jsonObject = new JSONObject(); |
|
||||
try { |
|
||||
for (Map.Entry<String, String> entrys : data.entrySet()) { |
|
||||
jsonObject.put(entrys.getKey(), entrys.getValue()); |
|
||||
} |
|
||||
} catch (JSONException e) { |
|
||||
TXLog.e(TAG, e, "pack json data failed!"); |
|
||||
} |
|
||||
message.setQos(TXMqttConstants.QOS1); |
|
||||
message.setPayload(jsonObject.toString().getBytes()); |
|
||||
|
|
||||
// 用户上下文(请求实例) |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("publishTopic", requestID.getAndIncrement()); |
|
||||
|
|
||||
Log.d(TAG, "pub topic " + topic + message); |
|
||||
// 发布主题 |
|
||||
mMqttConnection.publish(topic, message, mqttRequest); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 订阅RRPC主题 |
|
||||
* |
|
||||
*/ |
|
||||
public void subscribeRRPCTopic() { |
|
||||
// 用户上下文(请求实例) |
|
||||
MQTTRequest mqttRequest = new MQTTRequest("subscribeTopic", requestID.getAndIncrement()); |
|
||||
// 订阅主题 |
|
||||
mMqttConnection.subscribeRRPCTopic(TXMqttConstants.QOS0, mqttRequest); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 生成一条日志 |
|
||||
* @param logLevel 日志级别: |
|
||||
* 错误:TXMqttLogConstants.LEVEL_ERROR |
|
||||
* 警告:TXMqttLogConstants.LEVEL_WARN |
|
||||
* 通知:TXMqttLogConstants.LEVEL_INFO |
|
||||
* 调试:TXMqttLogConstants.LEVEL_DEBUG |
|
||||
* @param tag |
|
||||
* @param format |
|
||||
* @param obj |
|
||||
*/ |
|
||||
public void mLog(int logLevel, final String tag,final String format, final Object... obj) { |
|
||||
if (mMqttLogFlag) |
|
||||
mMqttConnection.mLog(logLevel, tag, format, obj); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 发起一次日志上传 |
|
||||
*/ |
|
||||
public void uploadLog() { |
|
||||
mMqttConnection.uploadLog(); |
|
||||
} |
|
||||
|
|
||||
public void checkFirmware() { |
|
||||
|
|
||||
mMqttConnection.initOTA(Environment.getExternalStorageDirectory().getAbsolutePath(), new TXOTACallBack() { |
|
||||
@Override |
|
||||
public void onReportFirmwareVersion(int resultCode, String version, String resultMsg) { |
|
||||
TXLog.e(TAG, "onReportFirmwareVersion:" + resultCode + ", version:" + version + ", resultMsg:" + resultMsg); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public boolean onLastestFirmwareReady(String url, String md5, String version) { |
|
||||
TXLog.e(TAG, "MQTTSample onLastestFirmwareReady"); |
|
||||
return false; |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDownloadProgress(int percent, String version) { |
|
||||
TXLog.e(TAG, "onDownloadProgress:" + percent); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDownloadCompleted(String outputFile, String version) { |
|
||||
TXLog.e(TAG, "onDownloadCompleted:" + outputFile + ", version:" + version); |
|
||||
|
|
||||
mMqttConnection.reportOTAState(TXOTAConstansts.ReportState.DONE, 0, "OK", version); |
|
||||
} |
|
||||
|
|
||||
@Override |
|
||||
public void onDownloadFailure(int errCode, String version) { |
|
||||
TXLog.e(TAG, "onDownloadFailure:" + errCode); |
|
||||
|
|
||||
mMqttConnection.reportOTAState(TXOTAConstansts.ReportState.FAIL, errCode, "FAIL", version); |
|
||||
} |
|
||||
}); |
|
||||
mMqttConnection.reportCurrentFirmwareVersion("0.0.1"); |
|
||||
} |
|
||||
} |
|
@ -1,92 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
import com.alibaba.fastjson.JSONObject; |
|
||||
import com.tencent.iot.hub.device.android.core.gateway.TXGatewayConnection; |
|
||||
|
|
||||
import io.dcloud.feature.uniapp.annotation.UniJSMethod; |
|
||||
import io.dcloud.feature.uniapp.bridge.UniJSCallback; |
|
||||
import io.dcloud.feature.uniapp.common.UniModule; |
|
||||
|
|
||||
import android.util.Log; |
|
||||
|
|
||||
public class zmtClass extends UniModule { |
|
||||
|
|
||||
String TAG = "zmt--22222-"; |
|
||||
|
|
||||
//run ui thread |
|
||||
@UniJSMethod(uiThread = true) |
|
||||
public void testAsyncFunc(JSONObject options, final UniJSCallback callback) { |
|
||||
Log.e(TAG, "testAsync22222Func--zmt:"+options); |
|
||||
|
|
||||
//启动线程 |
|
||||
// MyThread mt = new MyThread(); |
|
||||
// mt.run(); |
|
||||
|
|
||||
if(callback != null) { |
|
||||
JSONObject data = new JSONObject(); |
|
||||
data.put("code", "2222已开启服务,等待接收数据"); |
|
||||
// callback.invoke(data); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
// Android 4.0 之后不能在主线程中请求HTTP请求 |
|
||||
new Thread(new Runnable(){ |
|
||||
@Override |
|
||||
public void run() { |
|
||||
System.out.println("MyThread thread running..."); |
|
||||
|
|
||||
TcpServer server = new TcpServer(); |
|
||||
server.initSocket((Integer.parseInt("16666"))); |
|
||||
|
|
||||
while (true){ |
|
||||
String message = server.receiveMessage(SocketConfig.UTF_8); |
|
||||
System.out.println(TAG+"接收消息:"+message); |
|
||||
|
|
||||
JSONObject data = new JSONObject(); |
|
||||
data.put("code", message); |
|
||||
// callback.invoke(data); |
|
||||
callback.invokeAndKeepAlive(data); |
|
||||
|
|
||||
String send_msg = "1111111111111"; |
|
||||
|
|
||||
send_msg = SocketHelper.getMessageByReadLine(send_msg); |
|
||||
server.sendMessage(send_msg,SocketConfig.UTF_8); |
|
||||
try { |
|
||||
Thread.sleep(1000); |
|
||||
} catch (InterruptedException e) { |
|
||||
e.printStackTrace(); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
} |
|
||||
}).start(); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
// @UniJSMethod(uiThread = true) |
|
||||
// public void testAsyncFunc(JSONObject options, UniJSCallback callback) { |
|
||||
// Log.e(TAG, "testAsyncFunc--zmt:"+options); |
|
||||
// |
|
||||
// if(callback != null) { |
|
||||
// JSONObject data = new JSONObject(); |
|
||||
// data.put("code", "success-zmt async"); |
|
||||
// callback.invoke(data); |
|
||||
// } |
|
||||
// } |
|
||||
|
|
||||
//run JS thread |
|
||||
@UniJSMethod(uiThread = false) |
|
||||
public JSONObject testSyncFunc(){ |
|
||||
Log.e(TAG, "testSyncFunc--zmt2"); |
|
||||
|
|
||||
|
|
||||
JSONObject data = new JSONObject(); |
|
||||
data.put("code", "success-zmt sync"); |
|
||||
return data; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
} |
|
@ -1,17 +0,0 @@ |
|||||
package io.dcloud.zmt_module; |
|
||||
|
|
||||
import org.junit.Test; |
|
||||
|
|
||||
import static org.junit.Assert.*; |
|
||||
|
|
||||
/** |
|
||||
* Example local unit test, which will execute on the development machine (host). |
|
||||
* |
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|
||||
*/ |
|
||||
public class ExampleUnitTest { |
|
||||
@Test |
|
||||
public void addition_isCorrect() { |
|
||||
assertEquals(4, 2 + 2); |
|
||||
} |
|
||||
} |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue