---
title: "设备信息"
description: "读取 Android 非持久设备、显示和运行时信息。"
---


> 读取 Android 当前设备、显示和运行时信息，不采集持久设备标识。

## 模块边界

`device` 只提供非持久设备信息，用于适配布局、语言和诊断。它不提供 Android ID、序列号、
IMEI、广告 ID 或其他可用于跨会话追踪的标识。

实现入口：

| 入口 | 责任 |
| --- | --- |
| `frontend/src/api/device.ts` | `KSM.device.getInfo` 封装 |
| `android/app/src/main/java/dev/kasumi/app/KSMAndroidHostServices.kt` | 从 `Build`、窗口度量和资源读取字段 |
| `android/app/src/main/java/dev/kasumi/app/bridge/KSMRouter.kt` | 权限和返回结构校验 |

## 平台支持

| 方法 | Windows | Android | 权限 |
| --- | --- | --- | --- |
| `KSM.device.getInfo` / `device.getInfo` | 不支持 | 支持 | `device.info` |

Windows 不注册该命令，调用返回 `NOT_SUPPORTED`。

## 返回字段

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `platform` | `"android"` | 固定平台值 |
| `osVersion` | string | Android 版本字符串 |
| `model` | string | `Build.MODEL` |
| `manufacturer` | string | `Build.MANUFACTURER` |
| `appVersion` | string | 宿主应用版本 |
| `language` | string | 当前语言标签 |
| `screenWidth` | number | 当前窗口度量的物理像素宽度 |
| `screenHeight` | number | 当前窗口度量的物理像素高度 |
| `density` | number | Android 显示密度 |
| `deviceName` | string | 系统设备名，读取失败或为空时回退到 `Build.MODEL` |
| `timezone` | string | 当前时区 ID |
| `architecture` | string | `Build.SUPPORTED_ABIS` 的首选值 |

屏幕尺寸不是 CSS 像素。前端需要逻辑尺寸时，应使用浏览器布局信息或根据 `density` 转换。

## 示例

```ts
import { KSM } from '@kasumi/bridge';

const capabilities = await KSM.capabilities();
if (capabilities.commands.includes('device.getInfo')) {
  const info = await KSM.device.getInfo();
  console.info(
    `${info.manufacturer} ${info.model}`,
    `${info.screenWidth}x${info.screenHeight}@${info.density}`,
    info.timezone
  );
}
```

## 错误行为

| 情况 | 错误 |
| --- | --- |
| 未授予 `device.info` | `PERMISSION_DENIED` |
| Windows 或未配置设备服务 | `NOT_SUPPORTED` |
| 读取字段失败 | 使用空字符串或 `Build.MODEL` 回退，不返回持久标识 |

## 平台差异

该模块仅 Android 提供。`screenWidth` / `screenHeight` 来自当前窗口度量，旋转后可能变化；
`deviceName` 依赖系统 API，不同厂商可能返回空值或通用名称。

## 排查路径

1. 确认当前平台是 Android，且能力列表包含 `device.getInfo`。
2. 确认宿主已授予 `device.info`。
3. 检查屏幕尺寸是否来自当前窗口，而不是固定显示器分辨率。
4. 设备名为空时确认已回退到 `Build.MODEL`。
5. 不要把该接口返回的字段用于持久设备识别。
