跳到主要内容

管理设备应用

启动或停止应用前,应以设备返回的应用列表为准。

前提条件

使用 AI 辅助实现

使用 AI 开发

让 AI 帮助实现此工作流

使用官方“管理 AIBuds 设备应用”技能,根据你的 App 完成实现。

请阅读并遵循 https://docs-aibuds.github.io/zh-Hans/skills/manage-aibuds-device-apps,使用该技能在当前 iOS 项目中完成“管理 AIBuds 设备应用”,并验证结果。
查看官方技能

API 参考

框架

AIBuds.xcframework

协议

Swift
/// The protocol for device apps API. (Device Side Applications)
protocol DeviceAppsAPI: DeviceAPI {
    /// List of apps installed on the device, each element is an `NSNumber` wrapping the raw value of `DeviceApp`.
    var deviceApps: [NSNumber]? { get }

    /// Start the device side application.
    /// - Parameters:
    ///   - app: The app to start.
    ///   - completion: Reports success, the device status code, and an optional error.
    func startApp(_ app: DeviceApp, completion: AIBudsStatusCodeCompletionHandler?)

    /// Stop the device side application.
    /// - Parameters:
    ///   - app: The app to stop.
    ///   - completion: Reports success, the device status code, and an optional error.
    func stopApp(_ app: DeviceApp, completion: AIBudsStatusCodeCompletionHandler?)

    /// Stop all running applications and return to the home screen.
    /// - Parameter completion: Reports success and an optional error.
    func stopAllAppsAndReturnToHomeScreen(_ completion: AIBudsCompletionHandler?)

    /// Get the current foreground application.
    /// - Parameter completion: Reports success, the foreground app raw value, and an optional error.
    func getCurrentForegroundApp(
        _ completion: (
            (
                _ success: Bool,
                _ app: NSNumber?,
                _ error: NSError?
            ) -> Void
        )?
    )
}

符号

符号用途
deviceApps可用设备应用的原始值。
startApp启动一个应用。
stopApp停止一个应用。
stopAllAppsAndReturnToHomeScreen返回设备主屏幕。
getCurrentForegroundApp查询前台应用。

应用取值

SwiftObjective-C原始值含义
.homeScreenAIBudsDeviceAppHomeScreen0x00设备主屏幕,不可传给 startAppstopApp
.teleprompterAIBudsDeviceAppTeleprompter0x01提词器应用。
.aiChatAIBudsDeviceAppAiChat0x02AI 对话应用。
.navigationAIBudsDeviceAppNavigation0x03导航应用。
.clockAIBudsDeviceAppClock0x04时钟应用。
.translationAIBudsDeviceAppTranslation0x05翻译应用。

使用示例

Swift
guard let device = device as? DeviceAppsAPI else { return }

let apps = (device.deviceApps ?? []).compactMap {
    DeviceApp(rawValue: $0.intValue)
}

guard let app = apps.first else {
    print("No device application is available")
    return
}

device.startApp(app) { success, statusCode, error in
    guard success else {
        print(error?.localizedDescription ?? "Application failed to start")
        return
    }
    print("Application started: \(statusCode?.stringValue ?? "Unavailable")")
}

device.getCurrentForegroundApp { success, rawApp, error in
    let foreground = rawApp.flatMap { DeviceApp(rawValue: $0.intValue) }
    print(
        success
            ? "Foreground: \(String(describing: foreground))"
            : (error?.localizedDescription ?? "Query failed"))
}

错误处理

不要假定每台设备都支持全部 DeviceApp case。使用 deviceApps 判断可用性,通过 getCurrentForegroundApp 读取设备当前的前台应用,并保留设备状态码供产品按需处理。