제어 경계
네트워크 API로 PowerPoint를 자동화하지 않습니다. 앱이 Bluetooth 키보드로 동작하므로 상대 기기에 별도 프로그램이 필요 없고, 물리 발표 리모컨과 같은 표준 키를 보냅니다.
| UI와 수명 주기 | Kotlin, Jetpack Compose, Android 포그라운드 서비스 |
|---|---|
| 전송 방식 | 공용 Classic HID / BLE HOGP 선택 |
| 명령 상태 | 연결/해제, 실행 중 1개와 제한된 대기열 |
| 호스트 의존성 | 활성 발표 앱이 표준 키를 해석해야 함 |
의미 명령 5개
| 동작 | HID 키 순서 |
|---|---|
| 다음 | Page Down |
| 이전 | Page Up |
| 처음부터 시작 | F5, 이어서 Home |
| 현재 슬라이드부터 시작 | Shift + F5 |
| 종료 | Escape |
전송 직전까지 의미 명령으로 유지합니다. UI는 발표 의도를 다루고 프로토콜 계층은 키 사용 코드와 중립 리포트를 소유합니다.
순서 제어 규칙
사용 가능한 연결이 생기면 숨은 준비 단계 없이 바로 입력을 받습니다. 한 번에 한 명령만 보내고 대기 작업은 16개로 제한합니다.
- 서로 반대인 인접 이동 명령은 전송 전에 상쇄합니다.
- 시작 명령은 실행·대기 중인 명령이 없을 때만 받습니다.
- 종료는 대기 중인 이동을 비우고 다음 경계 명령이 됩니다.
- 연결이 끊기면 오래된 탭이 재연결 후 재생되지 않도록 대기 명령을 버립니다.
- 슬라이드 쇼 창이 생긴 뒤 Home이 도달하도록 F5와 Home 사이에 500ms를 둡니다.
눌림과 중립 리포트
키 명령 하나를 눌림 리포트와 중립 해제가 함께 든 묶음으로 보냅니다. 실제로 누른 채 기다리는 구간이 없으므로 일반 해제 감시기는 끕니다. 중립 리포트를 한 번 더 보내면 키가 눌린 채 남는 문제를 더 막지 못하면서 전송량만 늘어납니다.
오래된 명령은 누락된 명령보다 위험합니다. 재연결 후 이전 ‘다음’이 재생되면 화면 내용이 바뀌므로 대기열은 제한된 거절과 세션 범위 전송을 우선합니다.
포그라운드 서비스가 HID 세션을 소유하고 Keyboard·Mouse 앱과 같은 형제 앱 소유권 넘김을 따릅니다. 종료 시 중립 상태를 보낸 뒤 연결과 등록을 해제합니다.
검증과 확인된 제약
키 매핑, 대기열 용량, 반대 명령 상쇄, 시작·종료 경계, 배터리 정책, 서비스 전달 경로, 수명 주기 복구와 접근성 터치 영역을 시험으로 확인합니다.
- 현재 슬라이드나 PowerPoint 슬라이드 쇼 창의 초점 여부를 읽을 수 없습니다.
- PowerPoint 단축키를 따르지 않는 발표 프로그램에서는 키 동작이 달라질 수 있습니다.
- Bluetooth 전송 성공은 발표 앱이 키를 처리했다는 확인이 아닙니다.