배터리 소모 없이 위치 인식 사운드 관리자 설계하기 노트

배터리 소모 없이 위치 인식 사운드 관리자 설계하기

저자는 조용한 도서관에서 휴대폰이 요란하게 울려 중요한 전화를 놓치는 공개적인 망신을 당했습니다. 이 사건은 수동으로 전화기 소리 설정을 계속 전환하는 만연한 문제를 부각시켰는데, 이는 인간의 오류로 인해 신뢰할 수 없음이 입증되었습니다. 저자는 사용자 개입 없이 벨소리 모드를 관리하기 위해 위치와 시간과 같은 맥락을 이해하는 자동화된 시스템을 원했습니다. 기존 솔루션은 배터리를 소모하거나 복잡한 규칙을 처리하기에는 너무 단순했습니다.이를 해결하기 위해 저자는 Muffle이라는 앱을 개발했습니다. 핵심 기술적 과제는 상당한 배터리 소모 없이 위치를 인식하는 것이었으며, 이는 효율적인 GeofencingClient API를 사용하여 해결되었습니다. ForegroundService는 앱의 중앙 로직 허브로 구현되어 프로세스가 활성 상태로 유지되도록 했습니다. 이 서비스는 사용자 재정의를 존중하면서 다양한 벨소리 모드 간의 전환을 관리했습니다.중요하게도, 이 앱은 NotificationManager의 방해 금지 필터와 통합되어 화이트리스트에 등록된 연락처의 긴급 전화를 허용했습니다. 이 하이브리드 접근 방식은 효율적인 지오펜싱과 사운드 상태 관리를 위한 사용자 지정 우선순위 큐를 결합했습니다. 다양한 Android 제조업체 간의 일관성 없는 AudioManager API 동작, 특히 공격적인 배터리 최적화와 관련하여 예상치 못한 구현 문제가 발생했습니다.이를 극복하기 위해 저자는 간단한 브로드캐스트 수신기에서 WorkManager로 전환하여 보다 안정적인 작업 예약을 수행했습니다. 다시 시작한다면, 저자는 메모리에서 규칙 충돌을 수동으로 관리하는 대신 처음에 데이터베이스 기반 우선순위 테이블을 사용했을 것입니다. 백그라운드 트리거 앱의 핵심 실용적인 교훈은 OS 프로세스 종료를 예상하고 WorkManager 및 GeofencingClient와 같은 안정적인 시스템 API를 활용하는 것입니다. 저자의 앱인 Muffle은 이러한 교훈을 맥락에 맞게 사운드 프로필을 자동화함으로써 구현하는 것을 목표로 합니다.