Browse Source

修复退出导航bug

weicu
liwei1dao 1 year ago
parent
commit
d7937be9ed
  1. 1
      local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift
  2. 79
      local_plugins/amap_service/ios/Classes/AmapViewController.swift
  3. 2
      local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt
  4. 29
      local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift

1
local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift

@ -19,6 +19,7 @@ extension Notification.Name {
static let navigationdEvent = Notification.Name("navigationdEvent") //导航事件 static let navigationdEvent = Notification.Name("navigationdEvent") //导航事件
static let locationstartEvent = Notification.Name("locationstartEvent") //启动定位 static let locationstartEvent = Notification.Name("locationstartEvent") //启动定位
static let updatelocationEvent = Notification.Name("updatelocationEvent") //更新位置事件 static let updatelocationEvent = Notification.Name("updatelocationEvent") //更新位置事件
static let exitnavigationdEvent = Notification.Name("exitnavigationdEvent") //退出导航事件
} }
class AgentServiceImpl: NSObject { class AgentServiceImpl: NSObject {
private let TAG = "AgentServiceImpl" private let TAG = "AgentServiceImpl"

79
local_plugins/amap_service/ios/Classes/AmapViewController.swift

@ -92,38 +92,39 @@ class AmapViewController: UIViewController {
} }
private func setupAMapComponents() { private func setupAMapComponents() {
self.addNSNotification();
// 1. 初始化 DriveView(必须在主线程) // 1. 初始化 DriveView(必须在主线程)
print("导航------------------ setupAMapComponents_1") // print("导航------------------ setupAMapComponents_1")
DispatchQueue.main.async { DispatchQueue.main.async {
print("导航------------------ setupAMapComponents_2") // print("导航------------------ setupAMapComponents_2")
self.driveView = AMapNaviDriveView(frame: self.view.bounds) self.driveView = AMapNaviDriveView(frame: self.view.bounds)
print("导航------------------ setupAMapComponents_3") // print("导航------------------ setupAMapComponents_3")
self.driveView.autoresizingMask = [.flexibleWidth, .flexibleHeight] self.driveView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
print("导航------------------ setupAMapComponents_4") // print("导航------------------ setupAMapComponents_4")
self.driveView.delegate = self self.driveView.delegate = self
print("导航------------------ setupAMapComponents_5") // print("导航------------------ setupAMapComponents_5")
self.view.addSubview(self.driveView) self.view.addSubview(self.driveView)
print("导航------------------ setupAMapComponents_6") // print("导航------------------ setupAMapComponents_6")
// 2. 初始化 DriveManager // 2. 初始化 DriveManager
self.driveManager = AMapNaviDriveManager.sharedInstance() self.driveManager = AMapNaviDriveManager.sharedInstance()
print("导航------------------ setupAMapComponents_7") // print("导航------------------ setupAMapComponents_7")
self.driveManager.delegate = self self.driveManager.delegate = self
print("导航------------------ setupAMapComponents_8") // print("导航------------------ setupAMapComponents_8")
self.driveManager.allowsBackgroundLocationUpdates = true self.driveManager.allowsBackgroundLocationUpdates = true
print("导航------------------ setupAMapComponents_9") // print("导航------------------ setupAMapComponents_9")
// 3. 确保对象非空再关联 // 3. 确保对象非空再关联
if let manager = self.driveManager, let view = self.driveView { if let manager = self.driveManager, let view = self.driveView {
print("导航------------------ setupAMapComponents_10") // print("导航------------------ setupAMapComponents_10")
manager.addDataRepresentative(view) manager.addDataRepresentative(view)
print("导航------------------ setupAMapComponents_11") // print("导航------------------ setupAMapComponents_11")
self.startNavigation() self.startNavigation()
print("导航------------------ setupAMapComponents_12") // print("导航------------------ setupAMapComponents_12")
} else { } else {
print("Error: driveManager or driveView is nil") print("Error: driveManager or driveView is nil")
} }
print("导航------------------ setupAMapComponents_13") // print("导航------------------ setupAMapComponents_13")
} }
} }
@ -144,26 +145,38 @@ class AmapViewController: UIViewController {
} }
@objc private func exitNavigation() { @objc private func exitNavigation() {
print("导航------------------ 退出导航,清理资源") print("导航------------------ 退出导航,清理资源")
// 停止导航 // 停止导航
driveManager.stopNavi() driveManager.stopNavi()
driveManager.removeDataRepresentative(driveView) driveManager.removeDataRepresentative(driveView)
driveManager.delegate = nil driveManager.delegate = nil
// 移除导航视图 // 移除导航视图
driveView.delegate = nil driveView.delegate = nil
driveView.removeFromSuperview() driveView.removeFromSuperview()
driveView = nil driveView = nil
// 销毁导航管理器 // 销毁导航管理器
driveManager = nil driveManager = nil
// 关闭当前页面,视情况而定 // 关闭当前页面 - 修复:使用正确的退出方式
// 如果你用的是导航控制器,可以pop if let navigationController = navigationController {
navigationController?.popViewController(animated: true) // 如果是在导航控制器中,使用 pop
// 或者如果是present出来的,dismiss navigationController.popViewController(animated: true)
// dismiss(animated: true, completion: nil) } else {
} // 如果是 present 出来的,使用 dismiss
dismiss(animated: true, completion: nil)
}
}
private func addNSNotification(){
NotificationCenter.default.addObserver(
forName: NSNotification.Name("ExitNavigation"),
object: nil,
queue: .main
) { _ in
self.exitNavigation()
}
}
} }
// MARK: - 代理方法 // MARK: - 代理方法

2
local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt

@ -164,7 +164,7 @@ class SystemFunctionHandler(private val context: Context? = null) {
handler = OpenRecorderHandler(context) handler = OpenRecorderHandler(context)
) )
// 注册退出交互函数 // 退出导航
client.registerLocalFunction( client.registerLocalFunction(
name = "exit_navigation", name = "exit_navigation",
description = "结束当前导航服务", description = "结束当前导航服务",

29
local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift

@ -64,9 +64,11 @@ public class SystemFunctionHandler: NSObject {
do { do {
// 注册退出交互函数 // 注册退出交互函数
registerExitInteractionFunction(client: client) registerExitInteractionFunction(client: client)
// 注册退出导航模式
registerExitNavigationFunction(client: client)
// 注册翻译模式函数 // 注册翻译模式函数
registerTranslationModeFunction(client: client) // registerTranslationModeFunction(client: client)
// 注册发送短信函数 // 注册发送短信函数
registerSendTextMessageFunction(client: client) registerSendTextMessageFunction(client: client)
@ -119,7 +121,22 @@ public class SystemFunctionHandler: NSObject {
handler: handler handler: handler
) )
} }
/// 注册退出交互函数
private func registerExitNavigationFunction(client: MCPClient) {
let parameters: [String: Any] = [
"type": "object",
"properties": [:],
"required": []
]
let handler = ExitNavigationHandler()
_ = client.registerLocalFunction(
name: "exit_navigation",
description: "结束当前导航",
parameters: parameters,
handler: handler
)
}
/// 注册翻译模式函数 /// 注册翻译模式函数
private func registerTranslationModeFunction(client: MCPClient) { private func registerTranslationModeFunction(client: MCPClient) {
let parameters: [String: Any] = [ let parameters: [String: Any] = [
@ -558,7 +575,13 @@ private class ExitInteractionHandler: FunctionHandler {
return "{\"result\": \"已结束当前交互\"}" return "{\"result\": \"已结束当前交互\"}"
} }
} }
/// 退出交互处理器
private class ExitNavigationHandler: FunctionHandler {
func handle(arguments: [String: Any]) async throws -> String {
NotificationCenter.default.post(name: NSNotification.Name("ExitNavigation"), object: nil)
return "{\"result\": \"已结束当前导航\"}"
}
}
/// 翻译模式处理器 /// 翻译模式处理器
private class TranslationModeHandler: FunctionHandler { private class TranslationModeHandler: FunctionHandler {
func handle(arguments: [String: Any]) async throws -> String { func handle(arguments: [String: Any]) async throws -> String {

Loading…
Cancel
Save