두 가지 요소 인 서비스 및 활동을 포함하는 간단한 애플리케이션을 작성하고 있습니다. 활동은 서비스 시작 및 중지에만 사용됩니다. 서비스는 PhoneStateListener
을 사용하여 현재 CellID, LAC 및 RSSI (신호 강도)에 대한 정보를 얻고 파일에 기록합니다.PhoneStateListener onSignalStrengthsChanged가 서비스에서 호출되는 것을 중지합니다.
휴대 전화가 잠 들어 있지 않으면 모든 것이 잘 작동합니다. 나는 화면을 끈 후 몇분 동안 아무런 반응이 없으면 내 PhoneStateListener
이 더 이상 호출되지 않는다는 것을 알았다. 내 서비스에 PARTIAL_WAKE_LOCK (및 다른 유형의 잠금 장치도 추가)을 시도했지만 배터리 소모가 심해서 그런 식으로 사용해서는 안됩니다. 다른 한편 그것은 정말로 나를 도와주지 않았다. 나의 또 다른 시도는 Timer를 사용하고 지정된 간격으로 나의 PhoneStateListener
을 등록 취소/등록하는 것이었다. 예기치 않게이 방법으로 CellId와 LAC를 새로 고치는 데 도움이되었습니다 (내 청취자의 onCellLocationChanged()
이 호출되었으므로 신호 강도가 여전히 업데이트되지 않았 음).
나는 BroadcastReciever
을 사용하려고하지 않았지만, 주제에 대해 파고 들었을 때부터 스레드를 읽은 후에는 그것이 나에게 도움이 될 것이라고 생각하지 않습니다.
요약하면, 내 질문 : 전화가 잠 들어있을 때 PhoneStateListener
메서드가 호출되지 않는 이유는 무엇입니까? 이 동작을 효율적으로 극복하기 위해 어떤 방법 (예 : 강제 전화가 깨어나거나 다른 메커니즘을 사용하는 것과 같은)이 있습니까?
'예기치 않게, 그것은이 방법이 도움이되었다고 보이는을 .. . 이것은 예기치 않게 듣기 노트에 대한 문서화가 아닌지 확실하지 않습니다. '등록시, 그리고 지정된 전화 통신 상태가 변경되면 전화 통신 관리자 적절한 콜백 메소드를 호출합니다 .'. – tidbeck