|
After Width: | Height: | Size: 135 KiB |
|
|
@ -165,6 +165,11 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 8px; font-size: 13px;">
|
||||
当前群组: <span id="ptt-current-group" style="color: #6366f1; font-weight: bold;">-</span>
|
||||
<span id="ptt-current-group-id" style="color: #94a3b8; font-size: 11px; margin-left: 5px;"></span>
|
||||
</div>
|
||||
|
||||
<div class="ws-input-group" style="margin-top: 10px;">
|
||||
<div style="display: flex; gap: 8px;">
|
||||
<div style="flex: 1;">
|
||||
|
|
@ -194,6 +199,7 @@
|
|||
<button class="btn ptt-btn ptt-action-btn" style="background: #6366f1;" onclick="pttGetGroups()" disabled>获取群组</button>
|
||||
<button class="btn ptt-btn ptt-action-btn" style="background: #8b5cf6;" onclick="pttGetMembers()" disabled>获取成员</button>
|
||||
<button class="btn ptt-btn ptt-action-btn" style="background: #3b82f6;" onclick="pttJumpGroup()" disabled>切换群组</button>
|
||||
<button class="btn ptt-btn ptt-action-btn" style="background: #0ea5e9;" onclick="pttGetCurrentGroup()">当前群组</button>
|
||||
<button class="btn ptt-btn ptt-action-btn btn-orange" onclick="pttForceRelease()" disabled>强制释放</button>
|
||||
<button class="btn ptt-btn ptt-action-btn" style="background: #000; color: #fca5a5;" onclick="pttSimulateConflict()" disabled>模拟冲突</button>
|
||||
</div>
|
||||
|
|
@ -552,6 +558,14 @@
|
|||
var loginId = window.android.pttGetLoginId ? window.android.pttGetLoginId() : "";
|
||||
updatePttLoginStatus(status, loginId);
|
||||
}
|
||||
if (window.android && window.android.pttGetCurrentGroup) {
|
||||
try {
|
||||
var group = JSON.parse(window.android.pttGetCurrentGroup());
|
||||
if (group.groupId) {
|
||||
updatePttCurrentGroup(group.groupId, group.groupName);
|
||||
}
|
||||
} catch(e) {}
|
||||
}
|
||||
}, 500);
|
||||
|
||||
// 告知 Android 页面加载完成
|
||||
|
|
@ -748,6 +762,13 @@
|
|||
}
|
||||
};
|
||||
|
||||
// 更新当前群组信息 (由 Android 实时推送)
|
||||
function updatePttCurrentGroup(groupId, groupName) {
|
||||
document.getElementById('ptt-current-group').innerText = groupName || '-';
|
||||
document.getElementById('ptt-current-group-id').innerText = groupId ? '(' + groupId + ')' : '';
|
||||
showPttResult("进入群组: " + groupName + " (" + groupId + ")");
|
||||
};
|
||||
|
||||
// PTT 登录成功回调 (由 Android 调用)
|
||||
function onPttLoginSuccess() {
|
||||
updatePttLoginStatusUI("02");
|
||||
|
|
@ -872,6 +893,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
function pttGetCurrentGroup() {
|
||||
if (window.android && window.android.pttGetCurrentGroup) {
|
||||
try {
|
||||
var group = JSON.parse(window.android.pttGetCurrentGroup());
|
||||
if (group.groupId) {
|
||||
updatePttCurrentGroup(group.groupId, group.groupName);
|
||||
} else {
|
||||
showPttResult("当前无群组信息");
|
||||
}
|
||||
} catch(e) {
|
||||
showPttResult("获取群组信息失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pttSendAtCmd() {
|
||||
var cmd = document.getElementById('ptt-at-cmd').value.trim();
|
||||
if (!cmd) {
|
||||
|
|
|
|||
|
|
@ -40,6 +40,14 @@ public class CallBackResolution {
|
|||
pttLoginId = "";
|
||||
}
|
||||
|
||||
public static String getCurrentGroupId() {
|
||||
return indexGroupId;
|
||||
}
|
||||
|
||||
public static String getCurrentGroupName() {
|
||||
return indexGroupName;
|
||||
}
|
||||
|
||||
public static void at_OEM_AT_cb(List<String> lisHex){
|
||||
if (lisHex.size() == 0) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ class AndroidInterface(private val activity: MainActivity) {
|
|||
"pttSpeakPlay" -> { pttSpeakPlay(); "" }
|
||||
"pttGetLoginStatus" -> pttGetLoginStatus()
|
||||
"pttGetLoginId" -> pttGetLoginId()
|
||||
"pttGetCurrentGroup" -> pttGetCurrentGroup()
|
||||
"pttSpeakRelease" -> { pttSpeakRelease(); "" }
|
||||
"pttForceRelease" -> { pttForceRelease(); "" }
|
||||
"pttGetGroupInfo" -> { pttGetGroupInfo(); "" }
|
||||
|
|
@ -113,6 +114,17 @@ class AndroidInterface(private val activity: MainActivity) {
|
|||
return com.example.kingway.ptt.CallBackResolution.getPttLoginId()
|
||||
}
|
||||
|
||||
fun pttGetCurrentGroup(): String {
|
||||
return try {
|
||||
val json = JSONObject()
|
||||
json.put("groupId", com.example.kingway.ptt.CallBackResolution.getCurrentGroupId())
|
||||
json.put("groupName", com.example.kingway.ptt.CallBackResolution.getCurrentGroupName())
|
||||
json.toString()
|
||||
} catch (e: Exception) {
|
||||
"{\"groupId\":\"\",\"groupName\":\"\"}"
|
||||
}
|
||||
}
|
||||
|
||||
fun pttSpeakRelease() {
|
||||
if (isSpeaking) {
|
||||
val now = System.currentTimeMillis()
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ class LoginActivity : AppCompatActivity() {
|
|||
// 使用 Handler 替代硬编码 Thread.sleep,避免阻塞或随意开辟线程
|
||||
android.os.Handler(android.os.Looper.getMainLooper()).postDelayed({
|
||||
try {
|
||||
com.example.kingway.ptt.SendAtUtil.toLogin("gzzdweb01", "123456", "61.243.1.123", 1, 1)
|
||||
com.example.kingway.ptt.SendAtUtil.toLogin(username, "123456", "220.154.131.231", 1, 1)
|
||||
} catch (e: Exception) {
|
||||
Timber.tag("PTT").e(e, "PTT login error")
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 73 KiB |
|
|
@ -1,38 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="200dp"
|
||||
android:height="200dp"
|
||||
android:viewportWidth="200"
|
||||
android:viewportHeight="200">
|
||||
|
||||
<!-- 背景圆盘 (纯净白) -->
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M100,100m-90,0a90,90 0,1 1,180 0a90,90 0,1 1,-180 0" />
|
||||
|
||||
<!-- 消防盾牌外廓 (消防红) -->
|
||||
<path
|
||||
android:fillColor="#D62828"
|
||||
android:pathData="M100,40 L155,62 L155,115 C155,145 130,170 100,180 C70,170 45,145 45,115 L45,62 Z" />
|
||||
|
||||
<!-- 盾牌内嵌线条 (深红) -->
|
||||
<path
|
||||
android:fillColor="#9B2226"
|
||||
android:pathData="M100,50 L145,68 L145,115 C145,140 125,160 100,170 C75,160 55,140 55,115 L55,68 Z" />
|
||||
|
||||
<!-- 核心星芒/十字 (象征调度指挥) -->
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M100,75 L112,98 L138,98 L118,115 L125,140 L100,125 L75,140 L82,115 L62,98 L88,98 Z" />
|
||||
|
||||
<!-- 外部环绕科技蓝装饰条 -->
|
||||
<path
|
||||
android:strokeColor="#004A8F"
|
||||
android:strokeWidth="5"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M100,20 A80,80 0,0 1,180,100" />
|
||||
<path
|
||||
android:strokeColor="#004A8F"
|
||||
android:strokeWidth="5"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M100,180 A80,80 0,0 1,20,100" />
|
||||
</vector>
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#004A8F"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
</vector>
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
|
||||
<!-- 消防盾牌图标,适配 Android 108dp 规范 -->
|
||||
<group
|
||||
android:translateX="18.5"
|
||||
android:translateY="18.5"
|
||||
android:scaleX="0.355"
|
||||
android:scaleY="0.355">
|
||||
|
||||
<!-- 背景白底,确保中心可见 -->
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M100,100m-90,0a90,90 0,1 1,180 0a90,90 0,1 1,-180 0" />
|
||||
|
||||
<!-- 消防盾牌外廓 -->
|
||||
<path
|
||||
android:fillColor="#D62828"
|
||||
android:pathData="M100,40 L155,62 L155,115 C155,145 130,170 100,180 C70,170 45,145 45,115 L45,62 Z" />
|
||||
|
||||
<!-- 盾牌内嵌线条 -->
|
||||
<path
|
||||
android:fillColor="#9B2226"
|
||||
android:pathData="M100,50 L145,68 L145,115 C145,140 125,160 100,170 C75,160 55,140 55,115 L55,68 Z" />
|
||||
|
||||
<!-- 核心星芒/十字 -->
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M100,75 L112,98 L138,98 L118,115 L125,140 L100,125 L75,140 L82,115 L62,98 L88,98 Z" />
|
||||
|
||||
<!-- 科技蓝环绕装饰 -->
|
||||
<path
|
||||
android:strokeColor="#004A8F"
|
||||
android:strokeWidth="5"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M100,20 A80,80 0,0 1,180,100" />
|
||||
<path
|
||||
android:strokeColor="#004A8F"
|
||||
android:strokeWidth="5"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M100,180 A80,80 0,0 1,20,100" />
|
||||
</group>
|
||||
</vector>
|
||||
|
After Width: | Height: | Size: 68 KiB |
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/ic_launcher_background" />
|
||||
<item android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</layer-list>
|
||||
|
|
@ -75,7 +75,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:text="测试账号: admin 密码: 123456"
|
||||
android:text="测试账号 锋: test004 助力农: test005 kui: test006 密码: 123456 必须,不然用不了ptt(或者2个后台都要加)"
|
||||
android:textColor="#CCFFFFFF"
|
||||
android:textSize="14sp" />
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 982 B |
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 7.6 KiB |