From e49b03fb994b99812604b60546b95ed70b9b71fb Mon Sep 17 00:00:00 2001
From: neilyhe <228429803@qq.com>
Date: Wed, 23 Oct 2024 16:10:37 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=A1=AC=E7=BC=96=E7=A0=81ip?=
=?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=92=8C=E7=AB=AF=E5=8F=A3=E5=8F=B7=EF=BC=8C?=
=?UTF-8?q?=E7=94=B1=E6=89=8B=E5=8A=A8=E8=BE=93=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../device/android/app/IoTMqttFragment.java | 77 ++--
.../src/main/res/layout/fragment_iot_mqtt.xml | 386 ++++++++++--------
.../src/main/res/values/strings.xml | 2 +
...34\347\250\213\347\231\273\345\275\225.md" | 6 +-
4 files changed, 269 insertions(+), 202 deletions(-)
diff --git a/hub/hub-android-demo/src/main/java/com/tencent/iot/hub/device/android/app/IoTMqttFragment.java b/hub/hub-android-demo/src/main/java/com/tencent/iot/hub/device/android/app/IoTMqttFragment.java
index 5f384c0d9..4eccc1d82 100644
--- a/hub/hub-android-demo/src/main/java/com/tencent/iot/hub/device/android/app/IoTMqttFragment.java
+++ b/hub/hub-android-demo/src/main/java/com/tencent/iot/hub/device/android/app/IoTMqttFragment.java
@@ -5,6 +5,8 @@
import android.content.res.AssetManager;
import android.os.Bundle;
import android.os.Environment;
+import android.text.Editable;
+import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -54,6 +56,7 @@
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Pattern;
import javax.net.SocketFactory;
@@ -75,6 +78,8 @@ public class IoTMqttFragment extends Fragment {
private Button mCloseConnectBtn;
+ private EditText mIPEdit;
+
private Button mSubScribeBtn;
private Button mUnSubscribeBtn;
@@ -165,9 +170,14 @@ public class IoTMqttFragment extends Fragment {
"Zcrqjyw+6baShrOfotoFDlFE/wqf6FjhgeRkOb5QlA==\n" +
"-----END CERTIFICATE-----\n";
// ssh 要访问的IP
- private String sshHost = "***REMOVED***";
- // ssh 端口号
- private int sshPort = 8022;
+ private String sshHost = "";
+ // ssh 端口号
+ private int sshPort = 0;
+
+ String pattern = "^(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\."
+ + "(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\."
+ + "(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\\."
+ + "(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$";
private volatile boolean mIsConnected;
@@ -264,27 +274,47 @@ public void onNothingSelected(AdapterView> parent) {
mConnectBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- if (!mIsConnected) {
- SharedPreferences settings = mParent.getSharedPreferences("config", Context.MODE_PRIVATE);
- mBrokerURL = settings.getString(BROKER_URL, mBrokerURL);
- mProductID = settings.getString(PRODUCT_ID, mProductID);
- mDevName = settings.getString(DEVICE_NAME, mDevName);
- mDevPSK = settings.getString(DEVICE_PSK, mDevPSK);
- mSubProductID = settings.getString(SUB_PRODUCID, mSubProductID);
- mSubDevName = settings.getString(SUB_DEVNAME, mSubDevName);
- mSubDevPsk = settings.getString(SUB_DEVICE_PSK, mSubDevPsk);
-
- mTestTopic = settings.getString(TEST_TOPIC, mTestTopic);
-
- mDevCert = settings.getString(DEVICE_CERT, mDevCert);
- mDevPriv = settings.getString(DEVICE_PRIV, mDevPriv);
-
- mMQTTSample = new MQTTSample(mParent, new SelfMqttActionCallBack(), mBrokerURL, mProductID, mDevName, mDevPSK,
- mDevCert, mDevPriv, mSubProductID, mSubDevName, mTestTopic, null, null, true, new SelfMqttLogCallBack(), sshHost, sshPort);
- mMQTTSample.setSubDevPsk(mSubDevPsk);
- mMQTTSample.connect();
+ Editable ip = mIPEdit.getText();
+ String[] ipInfo;
+ if (TextUtils.isEmpty(ip)) {
+ Toast.makeText(requireContext(), "请输入ip", Toast.LENGTH_SHORT).show();
+ } else if ((ipInfo = ip.toString().split(":")).length != 2) {
+ Toast.makeText(requireContext(), "ip与端口输入格式错误", Toast.LENGTH_SHORT).show();
} else {
- mParent.printLogInfo(TAG, "Mqtt has been connected, do not connect it again.", mLogInfoText, TXLog.LEVEL_INFO);
+ if (!Pattern.compile(pattern).matcher(ipInfo[0]).matches()) {
+ Toast.makeText(requireContext(), "ip地址输入格式错误", Toast.LENGTH_SHORT).show();
+ return;
+ } else {
+ sshHost = ipInfo[0];
+ }
+ if (!Pattern.compile("^\\d{4}$").matcher(ipInfo[1]).matches()) {
+ Toast.makeText(requireContext(), "端口号输入格式错误", Toast.LENGTH_SHORT).show();
+ return;
+ } else {
+ sshPort = Integer.parseInt(ipInfo[1]);
+ }
+ if (!mIsConnected) {
+ SharedPreferences settings = mParent.getSharedPreferences("config", Context.MODE_PRIVATE);
+ mBrokerURL = settings.getString(BROKER_URL, mBrokerURL);
+ mProductID = settings.getString(PRODUCT_ID, mProductID);
+ mDevName = settings.getString(DEVICE_NAME, mDevName);
+ mDevPSK = settings.getString(DEVICE_PSK, mDevPSK);
+ mSubProductID = settings.getString(SUB_PRODUCID, mSubProductID);
+ mSubDevName = settings.getString(SUB_DEVNAME, mSubDevName);
+ mSubDevPsk = settings.getString(SUB_DEVICE_PSK, mSubDevPsk);
+
+ mTestTopic = settings.getString(TEST_TOPIC, mTestTopic);
+
+ mDevCert = settings.getString(DEVICE_CERT, mDevCert);
+ mDevPriv = settings.getString(DEVICE_PRIV, mDevPriv);
+
+ mMQTTSample = new MQTTSample(mParent, new SelfMqttActionCallBack(), mBrokerURL, mProductID, mDevName, mDevPSK,
+ mDevCert, mDevPriv, mSubProductID, mSubDevName, mTestTopic, null, null, true, new SelfMqttLogCallBack(), sshHost, sshPort);
+ mMQTTSample.setSubDevPsk(mSubDevPsk);
+ mMQTTSample.connect();
+ } else {
+ mParent.printLogInfo(TAG, "Mqtt has been connected, do not connect it again.", mLogInfoText, TXLog.LEVEL_INFO);
+ }
}
}
});
@@ -589,6 +619,7 @@ public void onClick(View view) {
public void initView(View view) {
mConnectBtn = view.findViewById(R.id.connect);
mCloseConnectBtn = view.findViewById(R.id.close_connect);
+ mIPEdit = view.findViewById(R.id.ed_ip);
mSubScribeBtn = view.findViewById(R.id.subscribe_topic);
mUnSubscribeBtn = view.findViewById(R.id.unSubscribe_topic);
mPublishBtn = view.findViewById(R.id.publish_topic);
diff --git a/hub/hub-android-demo/src/main/res/layout/fragment_iot_mqtt.xml b/hub/hub-android-demo/src/main/res/layout/fragment_iot_mqtt.xml
index 69a9e18af..a5bb627b9 100644
--- a/hub/hub-android-demo/src/main/res/layout/fragment_iot_mqtt.xml
+++ b/hub/hub-android-demo/src/main/res/layout/fragment_iot_mqtt.xml
@@ -16,216 +16,247 @@
android:id="@+id/spinner4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:entries="@array/setup_items"/>
+ android:entries="@array/setup_items" />
-
-
-
-
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="6dp">
-
+ android:text="@string/text_ip_address"
+ android:textColor="#000"
+ android:textSize="16sp" />
-
+ android:hint="@string/text_ip_address_tip"
+ android:textSize="12sp" />
-
+ android:layout_height="200dp">
-
+ android:orientation="vertical">
-
+
-
+
-
-
-
-
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
-
-
-
+
-
+
-
+
+
-
+
-
+
+
-
+
-
-
+
-
+
-
+
+
-
+
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ android:textStyle="bold" />
+
+
必要权限申请失败
订阅NTP主题
获取NTP时间
+ Ip地址:
+ 请输入IP地址:格式为(x.x.x.x:xxxx)
diff --git "a/hub/hub-device-android/docs/zh/\350\277\234\347\250\213\347\231\273\345\275\225.md" "b/hub/hub-device-android/docs/zh/\350\277\234\347\250\213\347\231\273\345\275\225.md"
index 4cbaee5cd..9f5fd89db 100644
--- "a/hub/hub-device-android/docs/zh/\350\277\234\347\250\213\347\231\273\345\275\225.md"
+++ "b/hub/hub-device-android/docs/zh/\350\277\234\347\250\213\347\231\273\345\275\225.md"
@@ -18,7 +18,7 @@
如Android系统上运行实例程序,可安装[termux-app](https://github.com/termux/termux-app),继而在 Termux App 上开启 ssh服务。
打开 Termux App 后,先安装openssh, 输入 'pkg upgrade' 'pkg install openssh'
安装好openssh后,开启 ssh服务, 输入'sshd' ,无错误提示说明开启 ssh服务 成功。
-查看 ssh服务 的ip,输入'ifconfig',如下示例中 ssh服务 的 ip为 ***REMOVED*** ,Termux App上开启的 ssh服务 默认端口号为8022。
+查看 ssh服务 的ip,输入'ifconfig',如下示例中 ssh服务 的 ip为 192.168.1.107 ,Termux App上开启的 ssh服务 默认端口号为8022。
```
~ $ ifconfig
Warning: cannot open /proc/net/dev (Permission denied). Limited output.
@@ -27,7 +27,7 @@
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
wlan0: flags=4163 mtu 1500
- inet ***REMOVED*** netmask 255.255.255.0 broadcast 192.168.1.255
+ inet 192.168.1.107 netmask 255.255.255.0 broadcast 192.168.1.255
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
```
Termux上查看当前用户名,输入'whoami', 如下示例中 当前用户名为 u0_a618。
@@ -50,7 +50,7 @@ Termux上设置对应的密码,输入'passwd', 输入并确认设置的密
```
{
// ssh 要访问的IP
- private String sshHost = "***REMOVED***";
+ private String sshHost = "192.168.1.107";
// ssh 端口号 sshd服务一般默认端口22
private int sshPort = 8022;
}