@fww_123/uni-ble-scanner 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/dist/core/base-scanner.d.ts +99 -0
  4. package/dist/core/base-scanner.d.ts.map +1 -0
  5. package/dist/factory.d.ts +44 -0
  6. package/dist/factory.d.ts.map +1 -0
  7. package/dist/index.d.ts +15 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.esm.js +1791 -0
  10. package/dist/index.js +1818 -0
  11. package/dist/platforms/android-native.d.ts +30 -0
  12. package/dist/platforms/android-native.d.ts.map +1 -0
  13. package/dist/platforms/harmony-native.d.ts +24 -0
  14. package/dist/platforms/harmony-native.d.ts.map +1 -0
  15. package/dist/platforms/ios-native.d.ts +27 -0
  16. package/dist/platforms/ios-native.d.ts.map +1 -0
  17. package/dist/platforms/uniapp-scanner.d.ts +30 -0
  18. package/dist/platforms/uniapp-scanner.d.ts.map +1 -0
  19. package/dist/types.d.ts +170 -0
  20. package/dist/types.d.ts.map +1 -0
  21. package/dist/utils/data-parser.d.ts +32 -0
  22. package/dist/utils/data-parser.d.ts.map +1 -0
  23. package/dist/utils/errors.d.ts +27 -0
  24. package/dist/utils/errors.d.ts.map +1 -0
  25. package/dist/utils/permissions.d.ts +9 -0
  26. package/dist/utils/permissions.d.ts.map +1 -0
  27. package/dist/utils/platform.d.ts +18 -0
  28. package/dist/utils/platform.d.ts.map +1 -0
  29. package/package.json +58 -0
  30. package/src/core/base-scanner.ts +309 -0
  31. package/src/factory.ts +116 -0
  32. package/src/index.ts +54 -0
  33. package/src/platforms/android-native.ts +300 -0
  34. package/src/platforms/harmony-native.ts +267 -0
  35. package/src/platforms/ios-native.ts +264 -0
  36. package/src/platforms/uniapp-scanner.ts +171 -0
  37. package/src/types/global.d.ts +25 -0
  38. package/src/types/uni-types.d.ts +83 -0
  39. package/src/types.ts +178 -0
  40. package/src/utils/data-parser.ts +217 -0
  41. package/src/utils/errors.ts +105 -0
  42. package/src/utils/permissions.ts +244 -0
  43. package/src/utils/platform.ts +70 -0
@@ -0,0 +1,30 @@
1
+ import { BaseScanner } from '../core/base-scanner';
2
+ import { Platform, AdapterState } from '../types';
3
+ /**
4
+ * Android 原生蓝牙扫描器
5
+ * 使用 uni-app 的 Native.js 调用 Android 原生 API
6
+ */
7
+ export declare class AndroidNativeScanner extends BaseScanner {
8
+ private bluetoothAdapter;
9
+ private bluetoothLeScanner;
10
+ private scanCallback;
11
+ private adapterStateReceiver;
12
+ getPlatform(): Platform;
13
+ init(): Promise<void>;
14
+ protected startScanInternal(): Promise<void>;
15
+ protected stopScanInternal(): Promise<void>;
16
+ checkPermissions(): Promise<boolean>;
17
+ requestPermissions(): Promise<boolean>;
18
+ onAdapterStateChange(callback: (state: AdapterState) => void): void;
19
+ destroy(): void;
20
+ /**
21
+ * 使用新版扫描 API (Android 5.0+)
22
+ */
23
+ private startNewScanAPI;
24
+ /**
25
+ * 使用旧版扫描 API
26
+ */
27
+ private startLegacyScan;
28
+ private legacyScanCallback;
29
+ }
30
+ //# sourceMappingURL=android-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"android-native.d.ts","sourceRoot":"","sources":["../../src/platforms/android-native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,YAAY,EAGb,MAAM,UAAU,CAAC;AAGlB;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,oBAAoB,CAAa;IAEzC,WAAW,IAAI,QAAQ;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAiCX,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;cAyBlC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAqCpC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAsC5C,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAkBnE,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,OAAO,CAAC,eAAe;IAyDvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,kBAAkB,CAAa;CACxC"}
@@ -0,0 +1,24 @@
1
+ import { BaseScanner } from '../core/base-scanner';
2
+ import { Platform, AdapterState } from '../types';
3
+ /**
4
+ * 鸿蒙原生蓝牙扫描器
5
+ * 使用鸿蒙原生 API 进行蓝牙扫描
6
+ */
7
+ export declare class HarmonyNativeScanner extends BaseScanner {
8
+ private bluetoothManager;
9
+ private bleScanner;
10
+ private scanCallback;
11
+ getPlatform(): Platform;
12
+ init(): Promise<void>;
13
+ protected startScanInternal(): Promise<void>;
14
+ protected stopScanInternal(): Promise<void>;
15
+ checkPermissions(): Promise<boolean>;
16
+ requestPermissions(): Promise<boolean>;
17
+ onAdapterStateChange(callback: (state: AdapterState) => void): void;
18
+ destroy(): void;
19
+ /**
20
+ * 获取鸿蒙蓝牙适配器状态
21
+ */
22
+ getAdapterState(): Promise<AdapterState>;
23
+ }
24
+ //# sourceMappingURL=harmony-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harmony-native.d.ts","sourceRoot":"","sources":["../../src/platforms/harmony-native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,YAAY,EAGb,MAAM,UAAU,CAAC;AAGlB;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAa;IAEjC,WAAW,IAAI,QAAQ;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAmCX,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;cAwElC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IA6BpC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB5C,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAoBnE,OAAO,IAAI,IAAI;IAuBf;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;CAmB/C"}
@@ -0,0 +1,27 @@
1
+ import { BaseScanner } from '../core/base-scanner';
2
+ import { Platform, AdapterState } from '../types';
3
+ /**
4
+ * iOS 原生蓝牙扫描器
5
+ * 使用 uni-app 的 Native.js 调用 iOS CoreBluetooth API
6
+ */
7
+ export declare class IOSNativeScanner extends BaseScanner {
8
+ private centralManager;
9
+ private delegate;
10
+ getPlatform(): Platform;
11
+ init(): Promise<void>;
12
+ protected startScanInternal(): Promise<void>;
13
+ protected stopScanInternal(): Promise<void>;
14
+ checkPermissions(): Promise<boolean>;
15
+ requestPermissions(): Promise<boolean>;
16
+ onAdapterStateChange(callback: (state: AdapterState) => void): void;
17
+ destroy(): void;
18
+ /**
19
+ * 处理发现的外设
20
+ */
21
+ private handlePeripheral;
22
+ /**
23
+ * 获取 iOS 蓝牙适配器状态
24
+ */
25
+ getAdapterState(): Promise<AdapterState>;
26
+ }
27
+ //# sourceMappingURL=ios-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ios-native.d.ts","sourceRoot":"","sources":["../../src/platforms/ios-native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,YAAY,EAGb,MAAM,UAAU,CAAC;AAGlB;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAa;IAE7B,WAAW,IAAI,QAAQ;IAIjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cA2EX,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;cAwClC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAMpC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK5C,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAMnE,OAAO,IAAI,IAAI;IAiBf;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;CAoB/C"}
@@ -0,0 +1,30 @@
1
+ import { BaseScanner } from '../core/base-scanner';
2
+ import { Platform, AdapterState } from '../types';
3
+ /**
4
+ * UniApp 蓝牙扫描器
5
+ * 支持安卓、iOS 和鸿蒙平台
6
+ */
7
+ export declare class UniAppScanner extends BaseScanner {
8
+ private adapterStateChangeHandler;
9
+ getPlatform(): Platform;
10
+ init(): Promise<void>;
11
+ protected startScanInternal(): Promise<void>;
12
+ protected stopScanInternal(): Promise<void>;
13
+ checkPermissions(): Promise<boolean>;
14
+ requestPermissions(): Promise<boolean>;
15
+ onAdapterStateChange(callback: (state: AdapterState) => void): void;
16
+ destroy(): void;
17
+ /**
18
+ * 开始监听设备发现
19
+ */
20
+ private startDeviceDiscovery;
21
+ /**
22
+ * 停止监听设备发现
23
+ */
24
+ private stopDeviceDiscovery;
25
+ /**
26
+ * 获取蓝牙适配器状态
27
+ */
28
+ getAdapterState(): Promise<AdapterState>;
29
+ }
30
+ //# sourceMappingURL=uniapp-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniapp-scanner.d.ts","sourceRoot":"","sources":["../../src/platforms/uniapp-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,YAAY,EAGb,MAAM,UAAU,CAAC;AAIlB;;;GAGG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAO,CAAC,yBAAyB,CAAqC;IAEtE,WAAW,IAAI,QAAQ;IAejB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAoBX,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;cAuBlC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5C,oBAAoB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAgBnE,OAAO,IAAI,IAAI;IAoBf;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;CAe/C"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * 蓝牙设备信息
3
+ */
4
+ export interface BLEDevice {
5
+ /** 设备ID */
6
+ deviceId: string;
7
+ /** 设备名称 */
8
+ name?: string;
9
+ /** 信号强度 */
10
+ RSSI: number;
11
+ /** 广播数据 */
12
+ advertisData?: ArrayBuffer;
13
+ /** 广播数据 (Base64) */
14
+ advertisDataBase64?: string;
15
+ /** 制造商数据 */
16
+ manufacturerData?: Record<string, ArrayBuffer>;
17
+ /** 服务UUID列表 */
18
+ serviceUuids?: string[];
19
+ /** 本地名称 */
20
+ localName?: string;
21
+ /** 是否可连接 */
22
+ isConnectable?: boolean;
23
+ /** 发射功率 */
24
+ txPowerLevel?: number;
25
+ /** 平台特定数据 */
26
+ platformData?: Record<string, any>;
27
+ }
28
+ /**
29
+ * 扫描配置选项
30
+ */
31
+ export interface ScanOptions {
32
+ /** 扫描超时时间 (毫秒),默认 10000 */
33
+ timeout?: number;
34
+ /** 是否允许重复上报同一设备 */
35
+ allowDuplicates?: boolean;
36
+ /** 要扫描的服务UUID列表 */
37
+ services?: string[];
38
+ /** 设备名称过滤器 */
39
+ nameFilter?: string | string[];
40
+ /** 信号强度阈值 (dBm),低于此值的设备将被过滤 */
41
+ rssiThreshold?: number;
42
+ /** 制造商数据过滤器 */
43
+ manufacturerFilter?: number | number[];
44
+ }
45
+ /**
46
+ * 扫描状态
47
+ */
48
+ export declare enum ScanState {
49
+ IDLE = "idle",
50
+ SCANNING = "scanning",
51
+ STOPPING = "stopping",
52
+ ERROR = "error"
53
+ }
54
+ /**
55
+ * 平台类型
56
+ */
57
+ export declare enum Platform {
58
+ ANDROID = "android",
59
+ IOS = "ios",
60
+ HARMONY = "harmony",
61
+ UNKNOWN = "unknown"
62
+ }
63
+ /**
64
+ * 蓝牙适配器状态
65
+ */
66
+ export interface AdapterState {
67
+ /** 是否可用 */
68
+ available: boolean;
69
+ /** 是否已开启 */
70
+ discovering: boolean;
71
+ }
72
+ /**
73
+ * 扫描事件回调
74
+ */
75
+ export interface ScanCallbacks {
76
+ /** 发现设备回调 */
77
+ onDeviceFound?: (device: BLEDevice) => void;
78
+ /** 扫描开始回调 */
79
+ onScanStart?: () => void;
80
+ /** 扫描停止回调 */
81
+ onScanStop?: () => void;
82
+ /** 扫描超时回调 */
83
+ onTimeout?: () => void;
84
+ /** 错误回调 */
85
+ onError?: (error: BLEError) => void;
86
+ }
87
+ /**
88
+ * 蓝牙错误
89
+ */
90
+ export interface BLEError {
91
+ /** 错误码 */
92
+ code: number;
93
+ /** 错误信息 */
94
+ message: string;
95
+ /** 平台特定错误码 */
96
+ platformCode?: number;
97
+ /** 原始错误 */
98
+ originalError?: any;
99
+ }
100
+ /**
101
+ * 蓝牙扫描器接口
102
+ */
103
+ export interface IBLEScanner {
104
+ /** 初始化蓝牙适配器 */
105
+ init(): Promise<void>;
106
+ /** 开始扫描 */
107
+ startScan(options?: ScanOptions, callbacks?: ScanCallbacks): Promise<void>;
108
+ /** 停止扫描 */
109
+ stopScan(): Promise<void>;
110
+ /** 获取已发现的设备列表 */
111
+ getDiscoveredDevices(): BLEDevice[];
112
+ /** 清空设备列表 */
113
+ clearDevices(): void;
114
+ /** 获取当前扫描状态 */
115
+ getState(): ScanState;
116
+ /** 获取当前平台 */
117
+ getPlatform(): Platform;
118
+ /** 检查蓝牙权限 */
119
+ checkPermissions(): Promise<boolean>;
120
+ /** 请求蓝牙权限 */
121
+ requestPermissions(): Promise<boolean>;
122
+ /** 监听适配器状态变化 */
123
+ onAdapterStateChange(callback: (state: AdapterState) => void): void;
124
+ /** 销毁扫描器 */
125
+ destroy(): void;
126
+ }
127
+ /**
128
+ * 平台特定配置
129
+ */
130
+ export interface PlatformConfig {
131
+ /** 安卓配置 */
132
+ android?: {
133
+ /** 扫描模式 */
134
+ scanMode?: number;
135
+ /** 回调类型 */
136
+ callbackType?: number;
137
+ /** 匹配模式 */
138
+ matchMode?: number;
139
+ /** 是否使用旧版扫描API */
140
+ useLegacyScan?: boolean;
141
+ };
142
+ /** iOS配置 */
143
+ ios?: {
144
+ /** 是否允许后台扫描 */
145
+ allowBackgroundScan?: boolean;
146
+ /** 恢复标识 */
147
+ restoreIdentifier?: string;
148
+ };
149
+ /** 鸿蒙配置 */
150
+ harmony?: {
151
+ /** 扫描过滤器 */
152
+ filter?: any;
153
+ };
154
+ }
155
+ /**
156
+ * 扫描结果过滤器
157
+ */
158
+ export interface DeviceFilter {
159
+ /** 按名称过滤 */
160
+ name?: string | string[] | RegExp;
161
+ /** 按服务UUID过滤 */
162
+ serviceUuid?: string | string[];
163
+ /** 按制造商ID过滤 */
164
+ manufacturerId?: number | number[];
165
+ /** 按信号强度过滤 */
166
+ minRssi?: number;
167
+ /** 自定义过滤函数 */
168
+ custom?: (device: BLEDevice) => boolean;
169
+ }
170
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { BLEDevice } from '../types';
2
+ /**
3
+ * 解析广播数据
4
+ */
5
+ export declare function parseAdvertisementData(data: ArrayBuffer | string): {
6
+ manufacturerData?: Record<string, ArrayBuffer>;
7
+ serviceUuids?: string[];
8
+ localName?: string;
9
+ txPowerLevel?: number;
10
+ isConnectable?: boolean;
11
+ };
12
+ /**
13
+ * Base64 转 ArrayBuffer
14
+ */
15
+ export declare function base64ToArrayBuffer(base64: string): ArrayBuffer;
16
+ /**
17
+ * ArrayBuffer 转 Base64
18
+ */
19
+ export declare function arrayBufferToBase64(buffer: ArrayBuffer): string;
20
+ /**
21
+ * 标准化设备数据
22
+ */
23
+ export declare function normalizeDeviceData(device: any): BLEDevice;
24
+ /**
25
+ * 格式化 UUID (统一格式)
26
+ */
27
+ export declare function formatUUID(uuid: string): string;
28
+ /**
29
+ * 检查 UUID 是否匹配
30
+ */
31
+ export declare function matchUUID(uuid1: string, uuid2: string): boolean;
32
+ //# sourceMappingURL=data-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-parser.d.ts","sourceRoot":"","sources":["../../src/utils/data-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAsFA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAQ/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAO/D;AA0BD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,CAqC1D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgB/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D"}
@@ -0,0 +1,27 @@
1
+ import { BLEError } from '../types';
2
+ /**
3
+ * 错误码定义
4
+ */
5
+ export declare const ErrorCodes: Record<string, number>;
6
+ /**
7
+ * 创建错误对象
8
+ */
9
+ export declare function createError(code: number, message: string, platformCode?: number, originalError?: any): BLEError;
10
+ /**
11
+ * 通用错误
12
+ */
13
+ export declare const Errors: {
14
+ notInitialized: () => BLEError;
15
+ alreadyScanning: () => BLEError;
16
+ notScanning: () => BLEError;
17
+ permissionDenied: () => BLEError;
18
+ bluetoothDisabled: () => BLEError;
19
+ unsupportedPlatform: () => BLEError;
20
+ adapterNotAvailable: () => BLEError;
21
+ scanFailed: (reason?: string) => BLEError;
22
+ };
23
+ /**
24
+ * 处理平台特定错误
25
+ */
26
+ export declare function handlePlatformError(error: any, platform: string): BLEError;
27
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoB7C,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,GAAG,GAClB,QAAQ,CAOV;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;0BA6BK,MAAM;CAI7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAmB1E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 检查权限
3
+ */
4
+ export declare function checkPermissions(): Promise<boolean>;
5
+ /**
6
+ * 请求权限
7
+ */
8
+ export declare function requestPermissions(): Promise<boolean>;
9
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAmCA;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAazD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAa3D"}
@@ -0,0 +1,18 @@
1
+ import { Platform } from '../types';
2
+ /**
3
+ * 获取当前运行平台
4
+ */
5
+ export declare function getPlatform(): Platform;
6
+ /**
7
+ * 检查是否在指定平台运行
8
+ */
9
+ export declare function isPlatform(platform: Platform): boolean;
10
+ /**
11
+ * 检查是否是移动端APP环境
12
+ */
13
+ export declare function isApp(): boolean;
14
+ /**
15
+ * 获取平台名称
16
+ */
17
+ export declare function getPlatformName(): string;
18
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CA2BtC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAQ/B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAYxC"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@fww_123/uni-ble-scanner",
3
+ "version": "1.0.0",
4
+ "description": "跨平台蓝牙低功耗扫描组件,支持安卓、鸿蒙、iOS",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "src",
11
+ "native-plugins"
12
+ ],
13
+ "scripts": {
14
+ "build": "rollup -c",
15
+ "dev": "rollup -c -w",
16
+ "test": "jest",
17
+ "lint": "eslint src --ext .ts",
18
+ "typecheck": "tsc --noEmit",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "bluetooth",
23
+ "ble",
24
+ "scanner",
25
+ "uni-app",
26
+ "harmonyos",
27
+ "android",
28
+ "ios",
29
+ "cross-platform"
30
+ ],
31
+ "author": "",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/yourusername/uni-ble-scanner.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/yourusername/uni-ble-scanner/issues"
39
+ },
40
+ "homepage": "https://github.com/yourusername/uni-ble-scanner#readme",
41
+ "devDependencies": {
42
+ "@rollup/plugin-commonjs": "^25.0.7",
43
+ "@rollup/plugin-node-resolve": "^15.2.3",
44
+ "@rollup/plugin-typescript": "^11.1.6",
45
+ "@types/node": "^20.11.0",
46
+ "rollup": "^4.9.6",
47
+ "tslib": "^2.6.2",
48
+ "typescript": "^5.3.3"
49
+ },
50
+ "peerDependencies": {
51
+ "@dcloudio/uni-app": "^3.0.0"
52
+ },
53
+ "peerDependenciesMeta": {
54
+ "@dcloudio/uni-app": {
55
+ "optional": true
56
+ }
57
+ }
58
+ }