[FEAT] 實作機器連線環境切換功能 (Demo vs 正式站)
1. 在 activity_setting.xml 新增環境切換單選鈕 (RadioGroup)。 2. 修改 SettingActivity.java 處理環境切換邏輯與 UI 初始化。 3. 修改 MachineStructure.java 新增 mqttEnv 欄位以儲存環境狀態。 4. 修改 MyApp.java 在啟動時從資料庫載入環境設定。 5. 修改 StarCloudAPI.java 使 API BASE_URL 根據環境設定動態切換。 6. 修改 MqttManager.java 使 MQTT Broker Host 根據環境設定動態切換。 7. 更新正式站 API (starcloud.taiwan-star.com.tw) 與 MQTT (emqx.taiwan-star.com.tw) 位址。
This commit is contained in:
parent
43b1a8b3e3
commit
65dd123d0c
@ -440,6 +440,9 @@ public class MyApp extends Application {
|
||||
logs.info("initialSettingData Machine:" + setting.toString());
|
||||
MyApp.getInstance().getMachine().setApiKey(setting.getData(0));
|
||||
MyApp.getInstance().getMachine().setMachineID(setting.getData(1));
|
||||
if (setting.getDataCount() >= 3 && setting.getData(2) != null && !setting.getData(2).isEmpty()) {
|
||||
MyApp.getInstance().getMachine().setMqttEnv(setting.getData(2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -35,8 +35,13 @@ import java.util.ArrayList;
|
||||
public class StarCloudAPI {
|
||||
private static final String TAG = "StarCloudAPI";
|
||||
|
||||
// Star-Cloud API 基礎路徑
|
||||
private static final String BASE_URL = "https://demo-cloud.setdomains.work/api/v1/app/";
|
||||
private String getBaseUrl() {
|
||||
if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) {
|
||||
return "https://starcloud.taiwan-star.com.tw/api/v1/app/";
|
||||
} else {
|
||||
return "https://demo-cloud.setdomains.work/api/v1/app/";
|
||||
}
|
||||
}
|
||||
|
||||
private HandlerMain handlerMain;
|
||||
private HandlerMain srcHandlerMain;
|
||||
@ -51,7 +56,7 @@ public class StarCloudAPI {
|
||||
*/
|
||||
public void login(final String account, final String password) {
|
||||
Log.i(TAG, "login() called for account: " + account);
|
||||
final String url = BASE_URL + "admin/login/B000";
|
||||
final String url = getBaseUrl() + "admin/login/B000";
|
||||
Log.i(TAG, "Starting B000 request to: " + url);
|
||||
|
||||
// 不依賴 FormPostMainScheduler (會靜默吞掉 IO exception)
|
||||
@ -156,7 +161,7 @@ public class StarCloudAPI {
|
||||
return;
|
||||
}
|
||||
|
||||
final String url = BASE_URL + "machine/setting/B014?machine=" + machineId;
|
||||
final String url = getBaseUrl() + "machine/setting/B014?machine=" + machineId;
|
||||
Log.i(TAG, "Starting B014 request to: " + url);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@ -242,7 +247,7 @@ public class StarCloudAPI {
|
||||
* 需要 Bearer Token 認證。
|
||||
*/
|
||||
public void downloadProductInfo() {
|
||||
final String url = BASE_URL + "machine/products/B012";
|
||||
final String url = getBaseUrl() + "machine/products/B012";
|
||||
Log.i(TAG, "Starting B012 request to: " + url);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@ -336,7 +341,7 @@ public class StarCloudAPI {
|
||||
* 需要 Bearer Token 認證。
|
||||
*/
|
||||
public void reportSlotList(final ReportSlotListStructure data) {
|
||||
final String url = BASE_URL + "products/supplementary/B009";
|
||||
final String url = getBaseUrl() + "products/supplementary/B009";
|
||||
Log.i(TAG, "Starting B009 request to: " + url);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@ -449,7 +454,7 @@ public class StarCloudAPI {
|
||||
*/
|
||||
public void verifyStaffCard(final String cardNo, final VerificationCallback callback) {
|
||||
final String machineId = MyApp.getInstance().getMachine().getMachineID();
|
||||
final String url = BASE_URL + "machine/staff/verify/B680";
|
||||
final String url = getBaseUrl() + "machine/staff/verify/B680";
|
||||
Log.i(TAG, "Starting B680 request for card: " + cardNo);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
@ -595,7 +600,8 @@ public class StarCloudAPI {
|
||||
settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getMachine().getClass().getSimpleName(),
|
||||
new String[] {
|
||||
MyApp.getInstance().getMachine().getApiKey(),
|
||||
MyApp.getInstance().getMachine().getMachineID()
|
||||
MyApp.getInstance().getMachine().getMachineID(),
|
||||
MyApp.getInstance().getMachine().getMqttEnv()
|
||||
}));
|
||||
|
||||
settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getEsunpay().getClass().getSimpleName(),
|
||||
@ -689,7 +695,7 @@ public class StarCloudAPI {
|
||||
}
|
||||
|
||||
public void downloadAdvertisement(final Runnable onComplete) {
|
||||
final String url = BASE_URL + "machine/ad/B005";
|
||||
final String url = getBaseUrl() + "machine/ad/B005";
|
||||
Log.i(TAG, "Starting B005 request to: " + url);
|
||||
|
||||
new Thread(new Runnable() {
|
||||
|
||||
@ -78,10 +78,15 @@ public class MqttManager {
|
||||
}
|
||||
}
|
||||
|
||||
String serverHost = "mqtt.setdomains.work";
|
||||
if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) {
|
||||
serverHost = "emqx.taiwan-star.com.tw";
|
||||
}
|
||||
|
||||
client = MqttClient.builder()
|
||||
.useMqttVersion3()
|
||||
.identifier(clientId)
|
||||
.serverHost("mqtt.setdomains.work")
|
||||
.serverHost(serverHost)
|
||||
.serverPort(443)
|
||||
.useSslWithDefaultConfig()
|
||||
.webSocketConfig()
|
||||
|
||||
@ -3,6 +3,7 @@ package com.unibuy.smartdevice.structure;
|
||||
public class MachineStructure {
|
||||
private String apiKey = "KahnEwjhfDBHUYS7";
|
||||
private String machineID;
|
||||
private String mqttEnv = "demo";
|
||||
public MachineStructure(String machineID) {
|
||||
this.machineID = machineID;
|
||||
}
|
||||
@ -27,4 +28,12 @@ public class MachineStructure {
|
||||
public void setMachineID(String machineID) {
|
||||
this.machineID = machineID;
|
||||
}
|
||||
|
||||
public String getMqttEnv() {
|
||||
return mqttEnv;
|
||||
}
|
||||
|
||||
public void setMqttEnv(String mqttEnv) {
|
||||
this.mqttEnv = mqttEnv;
|
||||
}
|
||||
}
|
||||
|
||||
@ -96,6 +96,11 @@ public class SettingActivity extends AppCompatActivityAbstract {
|
||||
case DATA_RELOAD:
|
||||
binding.buttonBack.setVisibility(View.INVISIBLE);
|
||||
MyApp.getInstance().getMachine().setMachineID(binding.editMachineID.getText().toString());
|
||||
if (binding.radioProd.isChecked()) {
|
||||
MyApp.getInstance().getMachine().setMqttEnv("prod");
|
||||
} else {
|
||||
MyApp.getInstance().getMachine().setMqttEnv("demo");
|
||||
}
|
||||
binding.progressLayout.setVisibility(View.VISIBLE); // 確保進度條顯示
|
||||
try {
|
||||
starCloudAPI.downloadSetting();
|
||||
@ -167,6 +172,12 @@ public class SettingActivity extends AppCompatActivityAbstract {
|
||||
binding.buttonReload.setText("重新綁定");
|
||||
}
|
||||
|
||||
if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) {
|
||||
binding.radioProd.setChecked(true);
|
||||
} else {
|
||||
binding.radioDemo.setChecked(true);
|
||||
}
|
||||
|
||||
if (statusList.isEmpty()) {
|
||||
SettinglogsDao settinglogsDao = new SettinglogsDao(this);
|
||||
for (String data : settinglogsDao.getAll()) {
|
||||
|
||||
@ -29,13 +29,36 @@
|
||||
android:inputType="text" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<RadioGroup
|
||||
android:id="@+id/radioGroupMqttEnv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textInputLayout">
|
||||
<RadioButton
|
||||
android:id="@+id/radioDemo"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Demo 站"
|
||||
android:textSize="20sp"
|
||||
android:checked="true"/>
|
||||
<RadioButton
|
||||
android:id="@+id/radioProd"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="正式站"
|
||||
android:textSize="20sp"
|
||||
android:layout_marginStart="20dp"/>
|
||||
</RadioGroup>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textInputLayout">
|
||||
app:layout_constraintTop_toBottomOf="@+id/radioGroupMqttEnv">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:layout_marginStart="10dp"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user