@simplysm/capacitor-plugin-usb-storage 13.0.93 → 13.0.96
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.
- package/README.md +20 -16
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# @simplysm/capacitor-plugin-usb-storage
|
|
2
2
|
|
|
3
3
|
Capacitor USB Mass Storage 플러그인. Android에서 USB 저장장치를 열거하고, 권한을 관리하며, 파일을 읽는다.
|
|
4
|
+
Web 환경에서는 IndexedDB 기반 가상 USB 스토리지를 제공하여 개발/테스트를 지원한다.
|
|
4
5
|
|
|
5
6
|
## 설치
|
|
6
7
|
|
|
@@ -12,18 +13,12 @@ npm install @simplysm/capacitor-plugin-usb-storage
|
|
|
12
13
|
**Peer:** `@capacitor/core` ^7.4.4
|
|
13
14
|
**Android 네이티브:** `me.jahnen:libaums:core:0.9.1` (USB Mass Storage 라이브러리)
|
|
14
15
|
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
// index.ts
|
|
19
|
-
export type { UsbStoragePlugin, UsbDeviceInfo, UsbDeviceFilter, UsbFileInfo } from "./UsbStoragePlugin";
|
|
20
|
-
export { UsbStorage } from "./UsbStorage";
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## 주요 사용법
|
|
16
|
+
## 주요 기능
|
|
24
17
|
|
|
25
18
|
### 기기 목록 조회
|
|
26
19
|
|
|
20
|
+
연결된 USB Mass Storage 기기 목록을 반환한다.
|
|
21
|
+
|
|
27
22
|
```typescript
|
|
28
23
|
import { UsbStorage } from "@simplysm/capacitor-plugin-usb-storage";
|
|
29
24
|
|
|
@@ -40,6 +35,7 @@ const devices = await UsbStorage.getDevices();
|
|
|
40
35
|
### 권한 관리
|
|
41
36
|
|
|
42
37
|
기기별로 `vendorId`/`productId` 조합으로 권한을 확인/요청한다.
|
|
38
|
+
Android에서는 시스템 권한 다이얼로그가 표시되며, Web에서는 항상 granted를 반환한다.
|
|
43
39
|
|
|
44
40
|
```typescript
|
|
45
41
|
import type { UsbDeviceFilter } from "@simplysm/capacitor-plugin-usb-storage";
|
|
@@ -54,6 +50,8 @@ if (!granted) {
|
|
|
54
50
|
|
|
55
51
|
### 디렉토리 읽기
|
|
56
52
|
|
|
53
|
+
USB 저장장치의 지정 경로에 있는 파일/폴더 목록을 반환한다.
|
|
54
|
+
|
|
57
55
|
```typescript
|
|
58
56
|
const filter: UsbDeviceFilter = { vendorId: 1234, productId: 5678 };
|
|
59
57
|
|
|
@@ -63,16 +61,16 @@ const files = await UsbStorage.readdir(filter, "/documents");
|
|
|
63
61
|
|
|
64
62
|
### 파일 읽기
|
|
65
63
|
|
|
64
|
+
USB 저장장치에서 파일을 읽어 `Bytes`(Uint8Array)로 반환한다. 파일이 없으면 `undefined`를 반환한다.
|
|
65
|
+
Android에서 최대 파일 크기는 100MB이다.
|
|
66
|
+
|
|
66
67
|
```typescript
|
|
67
68
|
import type { Bytes } from "@simplysm/core-common";
|
|
68
69
|
|
|
69
70
|
const filter: UsbDeviceFilter = { vendorId: 1234, productId: 5678 };
|
|
70
71
|
const data: Bytes | undefined = await UsbStorage.readFile(filter, "/documents/report.pdf");
|
|
71
|
-
// 파일이 없으면 undefined, 있으면 Bytes (Uint8Array)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
Android에서 최대 파일 크기는 100MB이다.
|
|
75
|
-
|
|
76
74
|
## API 레퍼런스
|
|
77
75
|
|
|
78
76
|
### `UsbStorage` (abstract class, static 메서드)
|
|
@@ -131,9 +129,7 @@ interface UsbFileInfo {
|
|
|
131
129
|
```typescript
|
|
132
130
|
import type { UsbDeviceFilter } from "@simplysm/capacitor-plugin-usb-storage";
|
|
133
131
|
|
|
134
|
-
//
|
|
135
|
-
// 일반적으로 Capacitor plugin 등록 시 자동으로 Web 구현체가 사용됨
|
|
136
|
-
|
|
132
|
+
// UsbStorageWeb 인스턴스에 직접 접근하여 가상 기기를 구성한다
|
|
137
133
|
// 가상 기기 추가
|
|
138
134
|
await usbStorageWeb.addVirtualDevice({
|
|
139
135
|
vendorId: 1234,
|
|
@@ -151,6 +147,14 @@ await usbStorageWeb.addVirtualFile(filter, "/test.txt", new Uint8Array([72, 101,
|
|
|
151
147
|
await usbStorageWeb.addVirtualDirectory(filter, "/docs");
|
|
152
148
|
```
|
|
153
149
|
|
|
150
|
+
### `UsbStorageWeb` 테스트 전용 메서드
|
|
151
|
+
|
|
152
|
+
| 메서드 | 시그니처 | 설명 |
|
|
153
|
+
|--------|----------|------|
|
|
154
|
+
| `addVirtualDevice` | `(device: { vendorId, productId, deviceName, manufacturerName, productName }) => Promise<void>` | 가상 USB 기기 추가 |
|
|
155
|
+
| `addVirtualFile` | `(filter: UsbDeviceFilter, filePath: string, data: Uint8Array) => Promise<void>` | 가상 파일 추가 |
|
|
156
|
+
| `addVirtualDirectory` | `(filter: UsbDeviceFilter, dirPath: string) => Promise<void>` | 가상 디렉토리 추가 |
|
|
157
|
+
|
|
154
158
|
Web 가상 스토리지는 `VirtualUsbStorage` 클래스를 사용하며, IndexedDB(`capacitor_usb_virtual_storage`)에 기기와 파일 데이터를 저장한다.
|
|
155
159
|
- 스토어: `devices` (keyPath: `key`, key = `vendorId:productId`), `files` (keyPath: `fullKey`, fullKey = `deviceKey:path`)
|
|
156
160
|
|
|
@@ -158,7 +162,7 @@ Web 가상 스토리지는 `VirtualUsbStorage` 클래스를 사용하며, Indexe
|
|
|
158
162
|
|
|
159
163
|
- **패키지:** `kr.co.simplysm.capacitor.usbstorage`
|
|
160
164
|
- **플러그인명:** `UsbStorage`
|
|
161
|
-
- **라이브러리:** `me.jahnen
|
|
165
|
+
- **라이브러리:** `me.jahnen.libaums:core:0.9.1`
|
|
162
166
|
- `getDevices`: `UsbMassStorageDevice.getMassStorageDevices(context)`
|
|
163
167
|
- `requestPermissions`: `UsbManager.requestPermission` + BroadcastReceiver 콜백 (Android 13+: `RECEIVER_NOT_EXPORTED`, Android 12+: `PendingIntent.FLAG_MUTABLE`)
|
|
164
168
|
- `readdir`/`readFile`: 기기 init -> 첫 번째 파티션의 FileSystem -> `root.search(path)` -> 작업 -> `device.close()`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/capacitor-plugin-usb-storage",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.96",
|
|
4
4
|
"description": "Simplysm Package - Capacitor USB Storage Plugin",
|
|
5
5
|
"author": "simplysm",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"android"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@simplysm/core-browser": "13.0.
|
|
22
|
-
"@simplysm/core-common": "13.0.
|
|
21
|
+
"@simplysm/core-browser": "13.0.96",
|
|
22
|
+
"@simplysm/core-common": "13.0.96"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@capacitor/core": "^7.6.0"
|