接入原生壳音频文件导入能力

新增 file.importAudio HostBridge 契约和 H5 facade

移动端通过 Expo DocumentPicker 读取受控音频文件

桌面端通过 Tauri 文件选择框读取受控音频文件

通用音频输入面板在原生壳复用宿主导入和现有音频处理管线

更新壳能力检查、测试、方案文档和共享决策记录
This commit is contained in:
2026-06-18 05:25:39 +08:00
parent 51dcff6d16
commit 3be997e286
15 changed files with 627 additions and 4 deletions
@@ -60,6 +60,7 @@ describe('HostBridge shared contract helpers', () => {
expect(isHostBridgeCapability('clipboard.readText')).toBe(true);
expect(isHostBridgeCapability('file.importText')).toBe(true);
expect(isHostBridgeCapability('file.importImage')).toBe(true);
expect(isHostBridgeCapability('file.importAudio')).toBe(true);
expect(isHostBridgeCapability('file.imageDropped')).toBe(true);
expect(isHostBridgeCapability('app.setBadgeCount')).toBe(true);
expect(isHostBridgeCapability('notification.showLocal')).toBe(true);
@@ -32,6 +32,7 @@ export const HOST_BRIDGE_METHODS = [
'file.importText',
'file.exportImage',
'file.importImage',
'file.importAudio',
'haptics.impact',
'notification.showLocal',
] as const;
@@ -336,6 +337,21 @@ export type FileImportImageResult = {
};
};
export type HostBridgeAudioMimeType =
| 'audio/mpeg'
| 'audio/mp4'
| 'audio/wav'
| 'audio/ogg'
| 'audio/webm';
export type FileImportAudioResult = {
action: 'selected';
fileName: string;
base64Data: string;
mimeType: HostBridgeAudioMimeType;
bytes: number;
};
export type HapticsImpactPayload = {
style?: 'light' | 'medium' | 'heavy';
};