# TSGame JSBridge 原生调用JavaScript接口规范文档 ## 文档说明 本文档详细描述TSGame游戏中App原生调用WebView JavaScript的所有JSBridge接口规范。专注于接口工作流程、参数格式、调用时机等核心规范,便于开发者准确复制接口功能到HarmonyOS应用中。 **适用平台**: Android / HarmonyOS **文档类型**: 接口规范文档 **文档版本**: v2.2 **更新日期**: 2025年7月13日 ### 接口分类 | 接口名称 | 调用方向 | 主要功能 | 调用频率 | |----------|----------|----------|----------| | `sharesuccess` | App→WebView | 分享结果通知 | 按需调用 | | `sharelogin` | App→WebView | 微信登录回调 | 按需调用 | | `getphoneinfo` | App→WebView | 设备信息返回 | 按需调用 | | `appservice` | App→WebView | 前后台状态通知 | 自动调用 | | `getaudiourl` | App→WebView | 录音上传结果 | 按需调用 | | `gameui_play_voice` | App→WebView | 语音播放控制 | 按需调用 | | `gameui_stop_voice` | App→WebView | 语音停止控制 | 按需调用 | | `phonestate` | App→WebView | 电话状态通知 | 自动调用 | | `getBattery` | App→WebView | 电池电量通知 | 自动调用/按需调用 | | `getwifiLevel` | App→WebView | WiFi信号强度通知 | 自动调用/按需调用 | | `getnetwork` | App→WebView | 网络连接状态通知 | 自动调用/按需调用 | | `getlocationinfo` | App→WebView | 位置信息通知 | 按需调用/自动调用 | | `getWebdata` | App→WebView | 页面数据传递 | 按需调用 | --- ## 1. 分享结果通知接口 (sharesuccess) ### 接口概述 当用户完成分享操作后,App通过此接口向WebView通知分享结果,包括成功、失败、取消等状态。 ### 工作流程 ```mermaid sequenceDiagram participant User as 用户 participant App as App participant Platform as 分享平台 participant WebView as WebView User->>App: 触发分享 App->>Platform: 调用分享SDK Platform->>User: 显示分享界面 User->>Platform: 完成/取消分享 Platform->>App: 返回分享结果 App->>WebView: 调用sharesuccess WebView->>WebView: 更新UI状态 ``` ### 参数规范 #### 标准数据格式 ```json { "success": 1, "type": 2 } ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 取值 | |------|------|------|------|------| | success | number | ✓ | 分享结果状态 | 1=成功, 0=失败, -1=取消 | | type | number | ✓ | 分享平台类型 | 1=微信好友, 2=微信朋友圈, 3=QQ好友, 4=QQ空间, 5=微博 | #### 调用时机 - ✅ 分享操作完成后立即调用 - ✅ 收到分享平台SDK回调后调用 - ❌ 不要在分享操作开始时调用 - ❌ 不要重复调用 ### 接口调用示例 #### 成功分享调用 ```javascript sharesuccess('{"success": 1, "type": 2}'); ``` #### 失败分享调用 ```javascript sharesuccess('{"success": 0, "type": 1}'); ``` #### 取消分享调用 ```javascript sharesuccess('{"success": -1, "type": 3}'); ``` ``` ### HarmonyOS实现要点 - 接口名称: `sharesuccess` - 调用方式: 通过WebView的JavaScript执行接口调用 - 数据格式: JSON字符串或JavaScript对象 - 调用时机: 分享操作完成后立即调用 --- ## 2. 微信登录回调接口 (sharelogin) ### 接口概述 微信登录完成后,App通过此接口向WebView传递用户信息,包括用户头像、昵称、openid等数据。 ### 工作流程 ```mermaid sequenceDiagram participant User as 用户 participant App as App participant WeChat as 微信 participant WebView as WebView User->>App: 点击微信登录 App->>WeChat: 调用微信授权 WeChat->>User: 显示授权页面 User->>WeChat: 确认授权 WeChat->>App: 返回授权码 App->>WeChat: 获取用户信息 WeChat->>App: 返回用户数据 App->>WebView: 调用sharelogin WebView->>WebView: 保存用户信息 ``` ### 参数规范 #### 标准数据格式 ```json { "openid": "ox7w6s_abc123def456", "headimgurl": "https://thirdwx.qlogo.cn/mmopen/vi_32/xxx.jpg", "nickname": "游戏玩家", "sex": "1", "city": "深圳", "province": "广东", "unionid": "oGRTHuB4Y_abc123def456" } ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | openid | string | ✓ | 微信用户唯一标识 | "ox7w6s_abc123def456" | | headimgurl | string | ✓ | 用户头像URL | "https://thirdwx.qlogo.cn/..." | | nickname | string | ✓ | 用户昵称 | "游戏玩家" | | sex | string | ✓ | 性别 | "1"=男, "2"=女, "0"=未知 | | city | string | ○ | 用户所在城市 | "深圳" | | province | string | ○ | 用户所在省份 | "广东" | | unionid | string | ○ | UnionID标识 | "oGRTHuB4Y_abc123def456" | #### 调用时机 - ✅ 微信授权成功且获取用户信息后 - ✅ 微信登录流程完全结束后 - ❌ 不要在授权过程中调用 - ❌ 不要在获取用户信息失败时调用 ### 接口调用示例 #### 微信登录成功调用 ```javascript sharelogin('{"openid": "ox7w6s_abc123def456", "headimgurl": "https://thirdwx.qlogo.cn/mmopen/vi_32/xxx.jpg", "nickname": "游戏玩家", "sex": "1", "city": "深圳", "province": "广东", "unionid": "oGRTHuB4Y_abc123def456"}'); ``` #### 最小必需信息调用 ```javascript sharelogin('{"openid": "ox7w6s_abc123def456", "headimgurl": "https://thirdwx.qlogo.cn/mmopen/vi_32/xxx.jpg", "nickname": "游戏玩家", "sex": "1"}'); ``` ``` ### HarmonyOS实现要点 - 接口名称: `sharelogin` - 调用方式: 微信登录完成后调用此接口传递用户信息 - 数据格式: JSON格式的用户信息对象 - 必需字段: openid, headimgurl, nickname, sex --- ## 3. 设备信息返回接口 (getphoneinfo) ### 接口概述 当WebView请求设备信息后,App通过此接口返回设备的硬件和系统信息。 ### 工作流程 ```mermaid sequenceDiagram participant WebView as WebView participant App as App participant System as 系统API WebView->>App: 调用getphoneinfo App->>System: 获取系统版本 App->>System: 获取设备型号 App->>System: 获取MAC地址 App->>System: 获取运营商信息 System->>App: 返回各项信息 App->>WebView: 调用getphoneinfo返回数据 ``` ### 参数规范 #### 标准数据格式 ```json { "PhoneVersion": "Android 12", "PhoneAdresseMAC": "02:00:00:00:00:00", "PhoneModel": "SM-G9910", "PhoneDeviceBrand": "samsung", "PhoneProvidersName": "中国移动", "PhoneIMEI": "863123456789012", "PhoneIMSI": "460123456789012" } ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | PhoneVersion | string | ✓ | 系统版本信息 | "Android 12" / "HarmonyOS 5.0" | | PhoneAdresseMAC | string | ✓ | 设备MAC地址 | "02:00:00:00:00:00" | | PhoneModel | string | ✓ | 设备型号 | "SM-G9910" | | PhoneDeviceBrand | string | ✓ | 设备品牌 | "samsung" / "HUAWEI" | | PhoneProvidersName | string | ✓ | 运营商名称 | "中国移动" | | PhoneIMEI | string | ○ | 设备IMEI | "863123456789012" | | PhoneIMSI | string | ○ | SIM卡IMSI | "460123456789012" | #### 调用时机 - ✅ 响应WebView的getphoneinfo请求时调用 - ✅ 设备信息收集完成后立即调用 - ❌ 不要主动调用,仅响应WebView请求 ### 接口调用示例 #### 完整设备信息调用 ```javascript getphoneinfo('{"PhoneVersion": "Android 12", "PhoneAdresseMAC": "02:00:00:00:00:00", "PhoneModel": "SM-G9910", "PhoneDeviceBrand": "samsung", "PhoneProvidersName": "中国移动", "PhoneIMEI": "863123456789012", "PhoneIMSI": "460123456789012"}'); ``` #### 基本设备信息调用 ```javascript getphoneinfo('{"PhoneVersion": "HarmonyOS 5.0", "PhoneAdresseMAC": "02:00:00:00:00:00", "PhoneModel": "Mate 60", "PhoneDeviceBrand": "HUAWEI", "PhoneProvidersName": "中国移动"}'); ``` ``` ### HarmonyOS实现要点 - 接口名称: `getphoneinfo` - 调用方式: 响应WebView请求时调用此接口返回设备信息 - 数据格式: 包含设备信息的JSON对象 - 必需字段: PhoneVersion, PhoneModel, PhoneDeviceBrand, PhoneAdresseMAC, PhoneProvidersName --- ## 4. 应用状态通知接口 (appservice) ### 接口概述 App前后台状态发生变化时,通过此接口通知WebView,便于游戏暂停/恢复等处理。 ### 工作流程 ```mermaid stateDiagram-v2 [*] --> 前台状态 前台状态 --> 后台状态: 应用切换到后台 后台状态 --> 前台状态: 应用切换到前台 前台状态 --> 前台状态: 屏幕解锁 后台状态 --> 后台状态: 屏幕锁定 前台状态: 发送 appservice(1) 后台状态: 发送 appservice(2) ``` ### 参数规范 #### 标准数据格式 ```javascript // 直接传递数字参数 appservice("1"); // 前台状态 appservice("2"); // 后台状态 ``` #### 参数说明 | 参数值 | 含义 | 触发场景 | |--------|------|----------| | "1" | 前台状态 | App回到前台、屏幕解锁、用户交互 | | "2" | 后台状态 | App切换到后台、屏幕锁定、电话来电 | #### 调用时机 - ✅ Activity.onResume() - 应用恢复前台 - ✅ Activity.onPause() - 应用进入后台 - ✅ 屏幕锁定/解锁事件 - ✅ 电话状态变化时 ### 接口调用示例 #### 应用回到前台 ```javascript appservice("1"); ``` #### 应用进入后台 ```javascript appservice("2"); ``` ``` ### HarmonyOS实现要点 - 接口名称: `appservice` - 调用方式: 应用前后台状态变化时自动调用 - 参数格式: 字符串类型的状态值 - 状态值: "1"=前台状态, "2"=后台状态 --- ## 5. 录音结果通知接口 (getaudiourl) ### 接口概述 用户完成录音后,App将录音文件上传到云端,然后通过此接口返回录音文件的URL和时长信息。 ### 工作流程 ```mermaid sequenceDiagram participant User as 用户 participant WebView as WebView participant App as App participant Cloud as 云存储 User->>WebView: 开始录音 WebView->>App: 调用prepareaudio App->>App: 开始录音 User->>App: 结束录音 App->>Cloud: 上传录音文件 Cloud->>App: 返回文件URL App->>WebView: 调用getaudiourl WebView->>WebView: 显示录音消息 ``` ### 参数规范 #### 成功时数据格式 ```json { "audiourl": "http://gameaudio.daoqi88.cn/audio_20231201_143022.amr", "time": 3.5 } ``` #### 重置时数据格式 ```json { "audiourl": "", "time": 0 } ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | audiourl | string | ✓ | 录音文件URL,空字符串表示重置 | "http://gameaudio.daoqi88.cn/xxx.amr" | | time | number | ✓ | 录音时长(秒),0表示重置 | 3.5 | #### 调用时机 - ✅ 录音上传成功后立即调用 - ✅ 录音被取消或重置时调用(传空值) - ❌ 不要在录音过程中调用 - ❌ 不要在上传失败时传递错误URL ### 接口调用示例 #### 录音上传成功 ```javascript getaudiourl('{"audiourl": "http://gameaudio.daoqi88.cn/audio_20231201_143022.amr", "time": 3.5}'); ``` #### 录音重置/取消 ```javascript getaudiourl('{"audiourl": "", "time": 0}'); ``` ``` ### HarmonyOS实现要点 - 接口名称: `getaudiourl` - 调用方式: 录音上传完成后调用此接口通知结果 - 数据格式: 包含录音URL和时长的JSON对象 - 重置调用: 传递空URL和0时长表示录音重置 --- ## 6. 语音播放控制接口 (gameui_play_voice / gameui_stop_voice) ### 接口概述 控制游戏中语音消息的播放和停止,包括显示播放动画和停止播放效果。 ### 工作流程 - 播放语音 ```mermaid sequenceDiagram participant User as 用户 participant App as App participant WebView as WebView participant Audio as 音频引擎 User->>App: 点击语音消息 App->>Audio: 开始播放音频 App->>WebView: 调用gameui_play_voice WebView->>WebView: 显示播放动画 Audio->>App: 播放完成 App->>WebView: 调用gameui_stop_voice WebView->>WebView: 停止播放动画 ``` ### 参数规范 #### gameui_play_voice 参数 ```javascript // 直接传递用户位置参数 gameui_play_voice("2"); // 播放用户位置2的语音 ``` #### gameui_stop_voice 参数 ```javascript // 直接传递用户位置参数 gameui_stop_voice("2"); // 停止用户位置2的语音 ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | userPosition | string | ✓ | 用户在游戏中的位置标识 | "1", "2", "3", "4" | #### 调用时机 **gameui_play_voice调用时机:** - ✅ 开始播放语音文件时立即调用 - ✅ 语音播放器准备就绪后调用 - ❌ 不要在播放结束时调用 **gameui_stop_voice调用时机:** - ✅ 语音播放完成时调用 - ✅ 用户主动停止播放时调用 - ✅ 播放出错需要停止时调用 ### 接口调用示例 #### 开始播放语音 ```javascript gameui_play_voice("2"); // 播放用户位置2的语音 ``` #### 停止播放语音 ```javascript gameui_stop_voice("2"); // 停止用户位置2的语音 ``` #### 多用户语音控制 ```javascript gameui_play_voice("1"); // 用户1开始播放 gameui_play_voice("3"); // 用户3开始播放 gameui_stop_voice("1"); // 用户1停止播放 gameui_stop_voice("3"); // 用户3停止播放 ``` ``` ### HarmonyOS实现要点 - 接口名称: `gameui_play_voice` / `gameui_stop_voice` - 调用方式: 语音播放开始时调用play接口,播放结束时调用stop接口 - 参数格式: 字符串类型的用户位置标识 - 位置标识: "1", "2", "3", "4", "5", "6" 等数字字符串 --- ## 7. 电话状态通知接口 (phonestate) ### 接口概述 当设备电话状态发生变化时,App通过此接口通知WebView,便于游戏在通话时暂停。 ### 工作流程 ```mermaid stateDiagram-v2 [*] --> 空闲状态 空闲状态 --> 来电状态: 电话来电 来电状态 --> 通话状态: 接听电话 来电状态 --> 空闲状态: 拒绝/未接 通话状态 --> 空闲状态: 挂断电话 空闲状态: 发送 phonestate(0) 来电状态: 发送 phonestate(1) 通话状态: 发送 phonestate(2) ``` ### 参数规范 #### 标准数据格式 ```javascript // 直接传递状态码 phonestate("0"); // 空闲状态 phonestate("1"); // 来电状态 phonestate("2"); // 通话状态 ``` #### 参数说明 | 状态码 | 含义 | 说明 | 游戏处理建议 | |--------|------|------|--------------| | "0" | CALL_STATE_IDLE | 空闲/挂断电话 | 恢复游戏 | | "1" | CALL_STATE_RINGING | 来电响铃 | 暂停游戏 | | "2" | CALL_STATE_OFFHOOK | 通话中 | 暂停游戏 | #### 调用时机 - ✅ 电话状态监听器检测到状态变化时 - ✅ 系统广播电话状态变化时 - ❌ 不要重复发送相同状态 - ❌ 不要在状态未确认变化时调用 ### 接口调用示例 #### 电话空闲状态 ```javascript phonestate("0"); // 电话挂断或空闲 ``` #### 电话来电状态 ```javascript phonestate("1"); // 电话响铃 ``` #### 电话通话状态 ```javascript phonestate("2"); // 正在通话 ``` ``` ### HarmonyOS实现要点 - 接口名称: `phonestate` - 调用方式: 电话状态变化时自动调用此接口 - 参数格式: 字符串类型的状态码 - 状态码: "0"=空闲, "1"=来电响铃, "2"=通话中 --- ## 8. 电池电量通知接口 (getBattery) ### 接口概述 当设备电池电量发生变化时,App自动通过此接口通知WebView当前电量百分比。同时WebView也可以主动请求获取当前电量信息。 ### 工作流程 #### 自动电量通知流程 ```mermaid sequenceDiagram participant System as 系统 participant App as App participant WebView as WebView System->>App: 电量变化广播 App->>App: 计算电量百分比 App->>WebView: 调用getBattery WebView->>WebView: 更新电量显示 ``` #### 主动电量查询流程 ```mermaid sequenceDiagram participant WebView as WebView participant App as App participant System as 系统 WebView->>App: 调用getbattery请求 App->>System: 获取电池状态 System->>App: 返回电量信息 App->>App: 计算电量百分比 App->>WebView: 调用getBattery返回结果 ``` ### 参数规范 #### 标准数据格式 ```javascript // 直接传递电量百分比字符串 getBattery("0.85"); // 85%电量 getBattery("0.42"); // 42%电量 getBattery("1.0"); // 100%电量 ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | batteryLevel | string | ✓ | 电池电量百分比(小数形式) | "0.85" (表示85%), "0.42" (表示42%) | #### 调用时机 **自动调用时机:** - ✅ 设备电量发生变化时自动调用 - ✅ 电池状态广播接收时调用 - ✅ 充电状态变化时调用 **主动调用时机:** - ✅ 响应WebView的getbattery请求时调用 - ✅ 应用启动时获取初始电量 - ❌ 不要频繁主动调用,避免性能影响 ### 双向接口说明 #### 1. WebView请求电量 (getbattery) WebView向App请求获取当前电量: ```javascript // WebView端发起请求 window.jsBridge.callHandler('getbattery', null, function(response) { // 处理返回的电量信息 }); ``` #### 2. App返回电量 (getBattery) App通过此接口向WebView返回电量信息: ```javascript // App调用WebView的getBattery接口 getBattery("0.75"); // 返回75%电量 ``` ### 接口调用示例 #### 高电量通知 ```javascript getBattery("0.90"); // 90%电量 ``` #### 中等电量通知 ```javascript getBattery("0.45"); // 45%电量 ``` #### 低电量警告 ```javascript getBattery("0.15"); // 15%电量,需要提醒充电 ``` #### 满电状态 ```javascript getBattery("1.0"); // 100%满电 ``` ### 电量计算逻辑 #### 电量百分比计算 ``` batteryPct = level / scale ``` 其中: - `level`: 当前电量值 - `scale`: 电量最大值 - `batteryPct`: 电量百分比(0.0-1.0) #### 示例计算 ``` 当前电量 level = 85 最大电量 scale = 100 电量百分比 = 85/100 = 0.85 调用: getBattery("0.85") ``` ### HarmonyOS实现要点 - 接口名称: `getBattery` (App→WebView), `getbattery` (WebView→App请求) - 调用方式: 电量变化时自动调用,或响应WebView主动请求 - 参数格式: 字符串类型的电量百分比(小数形式) - 监听机制: 注册电量变化广播接收器,实时监听电量状态 - 计算方式: level/scale得到0.0-1.0之间的小数值 --- ## 9. WiFi信号强度通知接口 (getwifiLevel) ### 接口概述 当设备WiFi信号强度发生变化时,App自动通过此接口通知WebView当前WiFi信号强度和网络名称。同时WebView也可以主动请求获取当前WiFi信息。 ### 工作流程 #### 自动信号强度通知流程 ```mermaid sequenceDiagram participant System as 系统 participant App as App participant WebView as WebView System->>App: WiFi信号变化广播 App->>App: 获取WiFi信息 App->>App: 计算信号强度等级 App->>WebView: 调用getwifiLevel WebView->>WebView: 更新信号显示 ``` #### 主动WiFi信息查询流程 ```mermaid sequenceDiagram participant WebView as WebView participant App as App participant System as 系统 WebView->>App: 调用getwifiLevel请求 App->>System: 获取WiFi连接状态 App->>System: 获取信号强度RSSI System->>App: 返回WiFi信息 App->>App: 计算信号强度等级 App->>WebView: 调用getwifiLevel返回结果 ``` ### 参数规范 #### 标准数据格式 ```json { "ssidname": "MyHome_WiFi_5G", "signalLevel": 4 } ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | ssidname | string | ✓ | WiFi网络名称(SSID) | "MyHome_WiFi_5G", "OfficeNetwork" | | signalLevel | number | ✓ | 信号强度等级(0-4) | 0=最弱, 1=弱, 2=一般, 3=强, 4=最强 | #### 调用时机 **自动调用时机:** - ✅ WiFi信号强度变化时自动调用(RSSI_CHANGED_ACTION广播) - ✅ WiFi连接状态变化时调用 - ✅ 切换WiFi网络时调用 **主动调用时机:** - ✅ 响应WebView的getwifiLevel请求时调用 - ✅ 应用启动时获取初始WiFi信息 - ❌ 不要频繁主动调用,避免性能影响 ### 双向接口说明 #### 1. WebView请求WiFi信息 (getwifiLevel请求) WebView向App请求获取当前WiFi信息: ```javascript // WebView端发起请求 window.jsBridge.callHandler('getwifiLevel', null, function(response) { // 处理返回的WiFi信息 }); ``` #### 2. App返回WiFi信息 (getwifiLevel响应) App通过此接口向WebView返回WiFi信息: ```javascript // App调用WebView的getwifiLevel接口 getwifiLevel('{"ssidname": "MyHome_WiFi_5G", "signalLevel": 4}'); ``` ### 接口调用示例 #### 强信号WiFi ```javascript getwifiLevel('{"ssidname": "MyHome_WiFi_5G", "signalLevel": 4}'); ``` #### 中等信号WiFi ```javascript getwifiLevel('{"ssidname": "Office_Network", "signalLevel": 2}'); ``` #### 弱信号WiFi ```javascript getwifiLevel('{"ssidname": "Public_WiFi", "signalLevel": 1}'); ``` #### 无WiFi连接 ```javascript getwifiLevel('{"ssidname": "", "signalLevel": 0}'); ``` ### 信号强度计算逻辑 #### 信号强度等级计算 ``` signalLevel = WifiManager.calculateSignalLevel(rssi, 5) ``` 其中: - `rssi`: WiFi信号强度原始值(负数,如-50dBm) - `5`: 信号等级分档数量(0-4共5个等级) - `signalLevel`: 信号强度等级(0-4) #### 信号强度等级说明 | 等级 | 信号质量 | RSSI范围(大概) | 说明 | |------|----------|----------------|------| | 0 | 无信号/很弱 | < -80dBm | 无法正常使用 | | 1 | 弱 | -80dBm ~ -70dBm | 连接不稳定 | | 2 | 一般 | -70dBm ~ -60dBm | 基本可用 | | 3 | 良好 | -60dBm ~ -50dBm | 连接稳定 | | 4 | 优秀 | > -50dBm | 信号很强 | ### WiFi信息获取流程 #### 获取WiFi基本信息 ```java WifiManager wifiManager = getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); // WiFi名称 String ssid = wifiInfo.getSSID(); // 信号强度RSSI值 int rssi = wifiInfo.getRssi(); // 计算信号强度等级(0-4) int signalLevel = WifiManager.calculateSignalLevel(rssi, 5); ``` #### 广播监听注册 ```java // 注册WiFi信号变化监听 IntentFilter filter = new IntentFilter(WifiManager.RSSI_CHANGED_ACTION); registerReceiver(wifiChangeReceiver, filter); ``` ### HarmonyOS实现要点 - 接口名称: `getwifiLevel` (双向接口,同时用于请求和响应) - 调用方式: WiFi信号变化时自动调用,或响应WebView主动请求 - 数据格式: JSON格式包含网络名称和信号强度等级 - 监听机制: 注册WiFi信号变化广播接收器(RSSI_CHANGED_ACTION) - 信号计算: 使用系统API将RSSI值转换为0-4等级 - 权限要求: 需要ACCESS_WIFI_STATE和ACCESS_FINE_LOCATION权限 --- ## 10. 网络连接状态通知接口 (getnetwork) ### 接口概述 当设备网络连接状态发生变化时,App自动通过此接口通知WebView当前网络连接类型。同时WebView也可以主动请求获取当前网络连接状态。 ### 工作流程 #### 自动网络状态通知流程 ```mermaid sequenceDiagram participant System as 系统 participant App as App participant WebView as WebView System->>App: 网络状态变化广播 App->>App: 检测网络连接状态 App->>App: 判断网络类型 App->>WebView: 调用getnetwork WebView->>WebView: 更新网络状态显示 ``` #### 主动网络状态查询流程 ```mermaid sequenceDiagram participant WebView as WebView participant App as App participant System as 系统 WebView->>App: 调用getnetwork请求 App->>System: 获取网络连接信息 App->>System: 检查WiFi连接状态 App->>System: 检查移动网络状态 System->>App: 返回网络信息 App->>App: 判断网络类型 App->>WebView: 调用getnetwork返回结果 ``` ### 参数规范 #### 标准数据格式 ```javascript // 直接传递网络类型代码字符串 getnetwork("1"); // 网络断开 getnetwork("2"); // WiFi连接 getnetwork("3"); // 移动网络连接 ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | networkType | string | ✓ | 网络连接类型代码 | "1"=断开, "2"=WiFi, "3"=移动网络 | #### 网络类型说明 | 类型码 | 网络状态 | 说明 | 应用建议 | |--------|----------|------|----------| | "1" | 网络断开 | 无任何网络连接 | 显示离线模式,禁用网络功能 | | "2" | WiFi连接 | 连接到WiFi网络 | 启用高质量内容,无流量限制 | | "3" | 移动网络 | 连接到蜂窝移动网络 | 节省流量模式,压缩内容 | #### 调用时机 **自动调用时机:** - ✅ 网络连接状态变化时自动调用(CONNECTIVITY_ACTION广播) - ✅ WiFi开关状态变化时调用 - ✅ 移动数据开关状态变化时调用 - ✅ 网络类型切换时调用 **主动调用时机:** - ✅ 响应WebView的getnetwork请求时调用 - ✅ 应用启动时获取初始网络状态 - ❌ 不要频繁主动调用,避免性能影响 ### 双向接口说明 #### 1. WebView请求网络状态 (getnetwork请求) WebView向App请求获取当前网络状态: ```javascript // WebView端发起请求 window.jsBridge.callHandler('getnetwork', '', function(response) { // 处理返回的网络状态 console.log('当前网络状态:', response); }); ``` #### 2. App返回网络状态 (getnetwork响应) App通过此接口向WebView返回网络状态: ```javascript // App调用WebView的getnetwork接口 getnetwork("2"); // 返回WiFi连接状态 ``` ### 接口调用示例 #### WiFi网络连接 ```javascript getnetwork("2"); // WiFi连接状态 ``` #### 移动网络连接 ```javascript getnetwork("3"); // 移动网络连接状态 ``` #### 网络断开 ```javascript getnetwork("1"); // 网络断开状态 ``` ### 网络状态检测逻辑 #### 网络连接状态判断流程 ```java // 1. 检查网络是否连接 boolean isConnected = isNetworkConnected(context); if (!isConnected) { return "1"; // 网络断开 } // 2. 检查是否为WiFi连接 boolean isWiFi = isNetworkAvailable(context); if (isWiFi) { return "2"; // WiFi连接 } else { return "3"; // 移动网络连接 } ``` #### 网络类型检测方法 ```java // 检查网络是否连接 public static boolean isNetworkConnected(Context context) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); return info != null && info.isConnected(); } // 检查是否为WiFi连接 public static boolean isNetworkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); return networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI; } ``` ### 网络状态广播监听 #### 广播接收器实现 ```java private class MyNetReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); int type = 1; // 默认断开状态 if (netInfo != null && netInfo.isAvailable()) { if (netInfo.getType() == ConnectivityManager.TYPE_WIFI) { type = 2; // WiFi网络 } else if (netInfo.getType() == ConnectivityManager.TYPE_MOBILE) { type = 3; // 移动网络 } } // 通知WebView网络状态变化 webview.callHandler("getnetwork", String.valueOf(type), null); } } } ``` #### 广播监听注册 ```java // 注册网络状态变化监听 MyNetReceiver myNetReceiver = new MyNetReceiver(); IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(myNetReceiver, filter); ``` ### 应用场景和处理建议 #### 不同网络状态的处理策略 | 网络状态 | 处理策略 | 具体建议 | |----------|----------|----------| | 网络断开(1) | 离线模式 | 显示网络错误提示,缓存用户操作,禁用网络请求 | | WiFi连接(2) | 高质量模式 | 启用高清图片/视频,自动更新,无流量限制 | | 移动网络(3) | 节省模式 | 压缩图片,询问大文件下载,显示流量提醒 | #### WebView端处理示例 ```javascript function handleNetworkChange(networkType) { switch(networkType) { case "1": // 网络断开 showOfflineMessage(); disableNetworkFeatures(); break; case "2": // WiFi连接 enableHighQualityMode(); hideDataWarning(); break; case "3": // 移动网络 enableDataSavingMode(); showDataUsageWarning(); break; } } ``` ### HarmonyOS实现要点 - 接口名称: `getnetwork` (双向接口,同时用于请求和响应) - 调用方式: 网络状态变化时自动调用,或响应WebView主动请求 - 参数格式: 字符串类型的网络类型代码 - 监听机制: 注册网络连接状态变化广播接收器(CONNECTIVITY_ACTION) - 状态判断: 通过ConnectivityManager检测网络连接状态和类型 - 权限要求: 需要ACCESS_NETWORK_STATE权限 --- ## 11. 位置信息通知接口 (getlocationinfo) ### 接口概述 当设备位置信息发生变化或WebView主动请求位置信息时,App通过此接口向WebView提供详细的地理位置信息,包括经纬度、地址描述、行政区划等数据。 ### 工作流程 #### 自动位置信息通知流程 ```mermaid sequenceDiagram participant System as 定位系统 participant App as App participant WebView as WebView System->>App: 位置变化回调 App->>App: 解析位置数据 App->>App: 构造MaplocationInfo对象 App->>WebView: 调用getlocationinfo WebView->>WebView: 更新位置显示 ``` #### 主动位置信息查询流程 ```mermaid sequenceDiagram participant WebView as WebView participant App as App participant LocationService as 定位服务 WebView->>App: 调用getlocationinfo请求 App->>LocationService: 启动定位服务 LocationService->>LocationService: GPS/网络定位 LocationService->>App: 返回位置信息 App->>App: 构造位置数据 App->>WebView: 调用getlocationinfo返回结果 ``` ### 参数规范 #### 标准数据格式 ```json { "latitude": 22.543096, "longitude": 114.057865, "address": "广东省深圳市南山区科技园南区深南大道9988号", "country": "中国", "province": "广东省", "city": "深圳市", "district": "南山区", "street": "深南大道", "cityCode": "0755" } ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | latitude | number | ✓ | 纬度坐标 | 22.543096 | | longitude | number | ✓ | 经度坐标 | 114.057865 | | address | string | ✓ | 详细地址描述 | "广东省深圳市南山区科技园南区深南大道9988号" | | country | string | ✓ | 国家名称 | "中国" | | province | string | ✓ | 省份名称 | "广东省" | | city | string | ✓ | 城市名称 | "深圳市" | | district | string | ✓ | 城区名称 | "南山区" | | street | string | ✓ | 街道名称 | "深南大道" | | cityCode | string | ○ | 城市区号 | "0755" | #### 调用时机 **自动调用时机:** - ✅ 设备位置发生变化时自动调用(AMapLocationListener回调) - ✅ 定位服务获取到新的位置信息时调用 - ✅ 应用启动时完成首次定位后调用 **主动调用时机:** - ✅ 响应WebView的getlocationinfo请求时调用 - ✅ 用户手动刷新位置信息时调用 - ❌ 不要在定位权限未授权时调用 - ❌ 不要在定位服务未启动时调用 ### 双向接口说明 #### 1. WebView请求位置信息 (getlocationinfo请求) WebView向App请求获取当前位置信息: ```javascript // WebView端发起请求 window.jsBridge.callHandler('getlocationinfo', '', function(response) { // 处理返回的位置信息 const locationData = JSON.parse(response); console.log('当前位置:', locationData); }); ``` #### 2. App返回位置信息 (getlocationinfo响应) App通过此接口向WebView返回位置信息: ```javascript // App调用WebView的getlocationinfo接口 getlocationinfo('{"latitude": 22.543096, "longitude": 114.057865, "address": "广东省深圳市南山区科技园南区深南大道9988号", "country": "中国", "province": "广东省", "city": "深圳市", "district": "南山区", "street": "深南大道", "cityCode": "0755"}'); ``` ### 接口调用示例 #### 深圳地区位置信息 ```javascript getlocationinfo('{"latitude": 22.543096, "longitude": 114.057865, "address": "广东省深圳市南山区科技园南区深南大道9988号", "country": "中国", "province": "广东省", "city": "深圳市", "district": "南山区", "street": "深南大道", "cityCode": "0755"}'); ``` #### 北京地区位置信息 ```javascript getlocationinfo('{"latitude": 39.908692, "longitude": 116.397477, "address": "北京市东城区东长安街1号", "country": "中国", "province": "北京市", "city": "北京市", "district": "东城区", "street": "东长安街", "cityCode": "010"}'); ``` #### 上海地区位置信息 ```javascript getlocationinfo('{"latitude": 31.230416, "longitude": 121.473701, "address": "上海市黄浦区南京东路20号", "country": "中国", "province": "上海市", "city": "上海市", "district": "黄浦区", "street": "南京东路", "cityCode": "021"}'); ``` #### 位置信息不可用时 ```javascript getlocationinfo('null'); // 定位失败或位置信息不可用 ``` ### 位置信息获取流程 #### 定位服务初始化 ```java // 1. 初始化定位客户端 AMapLocationClient mLocationClient = new AMapLocationClient(context); // 2. 配置定位参数 AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); // 高精度模式 mLocationOption.setOnceLocation(true); // 单次定位 mLocationOption.setOnceLocationLatest(true); // 返回最高精度结果 mLocationOption.setNeedAddress(true); // 返回地址信息 // 3. 设置定位监听器 mLocationClient.setLocationOption(mLocationOption); mLocationClient.setLocationListener(locationListener); mLocationClient.startLocation(); ``` #### 位置信息解析 ```java // 位置变化回调处理 public void onLocationChanged(AMapLocation amapLocation) { MaplocationInfo location = new MaplocationInfo(); // 设置坐标信息 location.setLatitude(amapLocation.getLatitude()); // 纬度 location.setLongitude(amapLocation.getLongitude()); // 经度 // 设置地址信息 location.setAddress(amapLocation.getAddress()); // 详细地址 location.setCountry(amapLocation.getCountry()); // 国家 location.setProvince(amapLocation.getProvince()); // 省份 location.setCity(amapLocation.getCity()); // 城市 location.setDistrict(amapLocation.getDistrict()); // 城区 location.setStreet(amapLocation.getStreet()); // 街道 location.setCityCode(amapLocation.getCityCode()); // 城市编码 // 转换为JSON并通知WebView Gson gson = new Gson(); String json = gson.toJson(location); webview.callHandler("getlocationinfo", json, null); } ``` ### 定位模式和精度说明 #### 定位模式类型 | 模式 | 精度 | 功耗 | 说明 | 适用场景 | |------|------|------|------|----------| | Hight_Accuracy | 高 | 高 | GPS+网络+基站定位 | 导航、精确位置需求 | | Battery_Saving | 中 | 低 | 网络+基站定位 | 一般位置需求 | | Device_Sensors | 最高 | 最高 | 仅GPS定位 | 户外精确定位 | #### 定位精度指标 | 指标 | 说明 | 典型值 | |------|------|--------| | 精度半径 | 定位结果的误差范围 | 10-50米 | | 定位时间 | 首次定位完成时间 | 2-10秒 | | 更新频率 | 位置更新的时间间隔 | 1-5秒 | ### 权限和隐私处理 #### 必需权限 ```xml ``` #### 权限检查流程 ```java // 检查位置权限 private boolean checkLocationPermission() { return ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; } // 请求位置权限 private void requestLocationPermission() { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE); } ``` ### 错误处理和异常情况 #### 常见错误类型 | 错误类型 | 错误码 | 说明 | 处理建议 | |----------|--------|------|----------| | 权限被拒绝 | 12 | 用户拒绝位置权限 | 引导用户开启权限 | | 定位失败 | 1 | GPS/网络定位失败 | 重试定位或使用缓存位置 | | 服务不可用 | 2 | 定位服务暂时不可用 | 稍后重试 | | 网络异常 | 4 | 网络连接异常 | 检查网络连接 | #### 异常处理示例 ```java public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { // 定位成功,处理位置信息 processLocationData(amapLocation); } else { // 定位失败,处理错误 handleLocationError(amapLocation.getErrorCode(), amapLocation.getErrorInfo()); } } } ``` ### HarmonyOS实现要点 - 接口名称: `getlocationinfo` (双向接口,同时用于请求和响应) - 调用方式: 位置变化时自动调用,或响应WebView主动请求 - 数据格式: JSON格式包含完整的位置信息对象 - 定位服务: 集成高德地图定位SDK或系统定位服务 - 权限管理: 需要精确位置权限(ACCESS_FINE_LOCATION) - 隐私保护: 遵循位置信息使用规范,明确告知用户位置用途 - 性能优化: 合理设置定位频率,避免过度消耗电量 - 错误处理: 完善的权限检查和定位失败处理机制 --- ## 12. 页面数据传递接口 (getWebdata) ### 接口概述 当App需要向WebView传递数据时,通过此接口将数据传递给WebView,主要用于页面加载完成后的数据初始化、页面间的数据通信以及Activity返回结果的数据传递。 ### 工作流程 #### 页面加载完成后数据传递流程 ```mermaid sequenceDiagram participant Activity as Activity participant WebView as WebView participant JavaScript as JavaScript Activity->>Activity: 获取Intent传递的data Activity->>WebView: 页面开始加载 WebView->>WebView: 页面加载进度监控 WebView->>Activity: onProgressChanged(100%) Activity->>JavaScript: 调用getWebdata(data) JavaScript->>JavaScript: 处理传入的数据 ``` #### Activity结果返回数据传递流程 ```mermaid sequenceDiagram participant SubActivity as 子Activity participant MainActivity as 主Activity participant WebView as WebView participant JavaScript as JavaScript SubActivity->>MainActivity: 返回结果(resultCode=101) MainActivity->>MainActivity: 从Intent获取data MainActivity->>JavaScript: 调用getWebdata(data) JavaScript->>JavaScript: 处理返回的数据 ``` ### 参数规范 #### 标准数据格式 ```javascript // 直接传递字符串数据 getWebdata("userdata_12345"); // 传递JSON格式数据 getWebdata('{"userId":"12345","userName":"张三","gameLevel":10}'); // 传递游戏状态数据 getWebdata('{"gameId":"niuniu","score":1500,"level":"expert"}'); ``` #### 参数说明 | 参数 | 类型 | 必需 | 说明 | 示例值 | |------|------|------|------|--------| | data | string | ✓ | 需要传递给WebView的数据 | 任意字符串或JSON格式数据 | #### 数据内容类型 | 数据类型 | 用途 | 格式 | 示例 | |----------|------|------|------| | 用户信息 | 传递用户基本信息 | JSON字符串 | `{"userId":"12345","userName":"张三"}` | | 游戏数据 | 传递游戏状态和设置 | JSON字符串 | `{"gameId":"niuniu","score":1500}` | | 配置参数 | 传递应用配置信息 | JSON字符串 | `{"theme":"dark","language":"zh-CN"}` | | 简单标识 | 传递简单的标识符 | 普通字符串 | `"user_login_success"` | #### 调用时机 **页面加载时调用:** - ✅ WebView页面加载完成后(onProgressChanged=100%) - ✅ 页面首次初始化需要数据时 - ✅ 页面刷新重新加载后 **Activity返回时调用:** - ✅ 子Activity返回结果时(onActivityResult) - ✅ 其他页面返回数据时(resultCode=101) - ✅ 页面间数据传递时 **数据更新时调用:** - ✅ App状态发生变化需要通知WebView时 - ✅ 用户信息更新后需要同步时 - ❌ 不要在页面加载过程中调用 - ❌ 不要在WebView未准备好时调用 ### 接口调用示例 #### 用户登录信息传递 ```javascript getWebdata('{"action":"user_login","userId":"12345","userName":"张三","avatar":"https://example.com/avatar.jpg","loginTime":"2025-01-13 14:30:00"}'); ``` #### 游戏数据传递 ```javascript getWebdata('{"action":"game_data","gameId":"niuniu","currentScore":1500,"highScore":3200,"level":"expert","coins":5000}'); ``` #### 简单状态传递 ```javascript getWebdata("page_refresh_complete"); ``` #### 配置信息传递 ```javascript getWebdata('{"action":"app_config","theme":"dark","language":"zh-CN","soundEnabled":true,"notificationEnabled":false}'); ``` #### 错误信息传递 ```javascript getWebdata('{"action":"error","errorCode":"E001","errorMessage":"网络连接失败","timestamp":"2025-01-13 14:30:00"}'); ``` ### 数据传递场景 #### 1. 页面初始化数据传递 **使用场景**: WebView页面加载完成后需要获取初始数据 ```java // Activity中页面加载完成后调用 @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100 && !isLoadingFinished) { isLoadingFinished = true; // 传递初始化数据 String initData = '{"userId":"12345","gameMode":"multiplayer"}'; x5webview.callHandler("getWebdata", initData, null); } } ``` #### 2. Activity返回结果数据传递 **使用场景**: 子Activity返回结果数据给WebView ```java // Activity结果处理 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == 101) { Bundle bundle = data.getExtras(); String resultData = bundle.getString("data"); // 传递返回结果数据 x5webview.callHandler("getWebdata", resultData, new CallBackFunction() { @Override public void onCallBack(String response) { // 处理WebView的响应 } }); } } ``` #### 3. 应用状态变化数据传递 **使用场景**: App状态发生变化需要通知WebView ```java // 应用状态变化时调用 private void notifyAppStateChange(String newState) { String stateData = '{"action":"app_state_change","state":"' + newState + '"}'; x5webview.callHandler("getWebdata", stateData, null); } ``` ### 数据处理建议 #### WebView端数据处理 ```javascript // WebView端接收数据的处理函数 function getWebdata(data) { try { // 尝试解析JSON数据 const parsedData = JSON.parse(data); // 根据action类型处理不同的数据 switch(parsedData.action) { case 'user_login': handleUserLogin(parsedData); break; case 'game_data': handleGameData(parsedData); break; case 'app_config': handleAppConfig(parsedData); break; default: handleGenericData(parsedData); } } catch (e) { // 非JSON数据,按字符串处理 handleStringData(data); } } // 处理用户登录数据 function handleUserLogin(userData) { document.getElementById('username').textContent = userData.userName; document.getElementById('userId').textContent = userData.userId; // 更新UI显示用户信息 } // 处理游戏数据 function handleGameData(gameData) { updateGameScore(gameData.currentScore); updateHighScore(gameData.highScore); updateUserLevel(gameData.level); } ``` #### 数据验证机制 ```javascript // 数据有效性验证 function validateData(data) { // 检查数据是否为空 if (!data || data.trim() === '') { console.warn('Received empty data'); return false; } // 检查JSON格式数据的必需字段 try { const parsedData = JSON.parse(data); if (parsedData.action && !isValidAction(parsedData.action)) { console.warn('Invalid action type:', parsedData.action); return false; } } catch (e) { // 非JSON数据,按字符串处理 } return true; } ``` ### 错误处理和异常情况 #### 常见错误类型 | 错误类型 | 说明 | 处理建议 | |----------|------|----------| | 空数据 | 传递的data为null或空字符串 | 检查数据有效性,提供默认值 | | JSON解析错误 | 数据格式不是有效的JSON | 按字符串处理或提供错误提示 | | 时机错误 | 在WebView未准备好时调用 | 确保页面加载完成后调用 | | 数据过大 | 传递的数据量过大 | 分批传递或压缩数据 | #### 异常处理示例 ```java // App端异常处理 private void safeCallGetWebdata(String data) { try { if (x5webview != null && data != null) { // 检查数据大小,避免传递过大数据 if (data.length() > MAX_DATA_SIZE) { Log.w("GetWebdata", "Data size too large: " + data.length()); // 分批传递或压缩数据 return; } x5webview.callHandler("getWebdata", data, new CallBackFunction() { @Override public void onCallBack(String response) { // 处理成功响应 Log.d("GetWebdata", "Data sent successfully"); } }); } else { Log.w("GetWebdata", "WebView not ready or data is null"); } } catch (Exception e) { Log.e("GetWebdata", "Error calling getWebdata", e); } } ``` ### 性能优化建议 #### 数据传递优化 - **数据压缩**: 对于大型JSON数据,考虑使用压缩算法 - **批量传递**: 将多个小数据合并为一次传递 - **异步处理**: 使用异步方式处理数据,避免阻塞UI线程 - **缓存机制**: 对频繁使用的数据进行缓存 #### 调用频率控制 - **避免重复调用**: 检查数据是否发生变化再决定是否调用 - **节流机制**: 对于频繁的状态变化,使用节流避免过度调用 - **优先级管理**: 重要数据优先传递,非关键数据可延后 ### HarmonyOS实现要点 - 接口名称: `getWebdata` - 调用方式: App向WebView传递数据时主动调用 - 参数格式: 字符串类型,支持普通字符串和JSON格式 - 调用时机: 页面加载完成后、Activity返回结果时、应用状态变化时 - 数据处理: WebView端需要实现getWebdata函数来接收和处理数据 - 错误处理: 需要处理空数据、JSON解析错误、调用时机错误等异常情况 - 性能考虑: 控制数据大小、调用频率,使用异步处理避免阻塞 --- ## 接口实现规范 ### 1. 通用调用规范 - **接口调用方式**: 通过WebView的JavaScript执行接口 - **数据传递格式**: JSON字符串或JavaScript基本类型 - **字符编码**: UTF-8编码 - **调用时机**: 严格按照各接口定义的调用时机执行 ### 2. 数据格式要求 - **JSON格式**: 复杂数据使用标准JSON格式 - **字符串转义**: 正确处理特殊字符和换行符 - **类型一致性**: 确保参数类型与接口定义完全匹配 - **字段完整性**: 必需字段不可缺失,可选字段可省略 ### 3. 双向接口处理 - **请求响应模式**: 如getBattery、getwifiLevel、getnetwork接口支持WebView主动请求和App主动推送 - **接口命名规范**: 双向接口使用相同命名,通过调用上下文区分请求和响应 - **状态同步**: 确保双向接口的状态信息保持一致 - **频率控制**: 避免高频率的双向调用造成性能问题 ### 4. 系统监听机制 - **广播接收器**: 电量、WiFi信号、电话状态、网络连接等需要注册相应的系统广播监听器 - **生命周期管理**: 正确注册和注销广播接收器,避免内存泄漏 - **权限处理**: 确保获取系统信息所需的权限已正确申请 - **异常处理**: 处理系统API调用可能出现的异常情况 ### 5. 接口兼容性要求 - **接口名称**: 与Android版本保持完全一致 - **参数结构**: 参数名称、类型、取值范围保持一致 - **调用频率**: 遵循相同的调用时机和频率限制 - **错误处理**: 异常情况下的处理方式保持一致 ### 6. 实现验证要点 - **功能验证**: 确保接口调用产生预期的WebView响应 - **数据验证**: 验证传递的数据格式和内容正确性 - **时序验证**: 验证接口调用的时机和顺序正确 - **兼容验证**: 确保与现有WebView代码完全兼容 --- ## 版本兼容性说明 ### 接口版本历史 | 版本 | 更新内容 | 影响范围 | |------|----------|----------| | v1.0 | 初始版本,基础接口定义 | 全部接口 | | v1.1 | 增加错误处理参数 | sharelogin接口 | | v2.0 | 标准化参数格式和文档 | 全部接口 | | v2.1 | 新增getlocationinfo位置信息接口 | 位置定位功能 | | v2.2 | 新增getWebdata页面数据传递接口 | 数据通信功能 | ### 向后兼容性 - 新版本保持对旧版本的完全兼容 - 不会删除或修改现有接口参数 - 新增参数使用可选方式,不影响现有实现 --- **文档维护**: TSGame开发团队 **最后更新**: 2025年7月13日 **版本**: v2.2 **联系方式**: 技术支持组