0

내 앱은 사용자 정의 간격으로 울리는 RTC_WAKEUP 알람을 예약합니다. 화재가 발생하면 위치 업데이트를 통해 위치 정보 서비스에 등록하고 (도시 수준은 충분 함) 단일 위치 보고서에 대해 최대 60 초 동안 대기하고 수신기를 등록 취소 한 다음 위치 별 웹 쿼리를 작성하고 다양한 작업을 수행합니다 반환 된 정보가있는 것들.알람이 장치를 깨울 때 위치 요청 시간이 초과됩니다. 무선 네트워크를 수동으로 다시 연결해야합니까?

위치 수정에 사용할 수있는 무선 네트워크가 항상 이어야합니다. 최소이어야합니다. 이 절차는 거의 항상 잘 작동하지만 로그는 한 번씩 위치 보고서를 기다리는 동안 앱이 시간 초과됨을 보여줍니다. 이것은 알람이 장치를 잠자기에서 깨 웠을 때만 나타나는 것 같습니다. 장치는 모바일 네트워크 연결이 불안정한 건물 내부 깊숙한 곳에 있습니다. 이러한 상황에서 무선 네트워크는 위치 정보의 유일한 원천이 될 수 있으므로, (a) 무선 네트워크가 알람이 잠자기에서 깨어나면 무선 네트워크가 자동으로 다시 연결되지 않습니다 (누군가가 무선 네트워크를 열려고 시도 할 때까지). 연결?) 또는 (b) 60 초만으로는 충분하지 않습니다.

이 중 하나가 사실인지 확인할 수 있습니까? 그것이 (a)라면 "무선 네트워크를 다시 연결 한 다음 다시 연결하십시오"라는 명령을 내릴 수 있습니까?

내가 시간 제한 간격으로 주변에 바이올린 수 있지만, 그 문제를 해결하기 위해 나타나는 경우에도, 내가 무슨 일이 일어나고 있는지 이해할 때까지 진정으로 근본 원인을 해결 한 확신 할 수 없습니다 ...


절차에 대한 자세한 설명 : 알람이 수신되면 LocationClient에 위치 서비스가 등록 된 IntentService이 실행됩니다. 그런 다음 wait() 루프를 입력하면 60 초 후에 오류를 포기하고 실패를 반환합니다. 클라이언트는 차례로 onConnected()에서 LocationListener을 등록합니다. 해당 청취자는보고를 받으면 대기 스레드 인 LocationnotifyAll()을 저장합니다. 이것은 LocationRequest의 모습이다 (I 하나만보고 싶어하지만, 나는 가능한 한 빨리 원하는) :

LocationRequest request = LocationRequest.create(); 
request.setPriority(LocationRequest.PRIORITY_LOW_POWER); 
request.setInterval(0); 
request.setFastestInterval(0); 
request.setNumUpdates(1); 

답변

0
제목의 질문에 대한 대답은

: 아니, 당신은 수동으로 할 필요가 없습니다 무선 네트워크를 다시 연결하십시오. 시스템이 자동으로이 작업을 수행합니다 (기술적으로 모든 버전 및 모든 장치에서이 사실을 약속 할 수는 없습니다).

그래서 실제로 무슨 일이 벌어 졌습니까? 두가지. 첫째, 기기가 Wi-Fi에 자동으로 다시 연결되지만 이는 일시적인 과정이 아닙니다. 나는 ConnectivityManager가 인터넷에서 물건을 가져 오기 전에 인터넷에 연결되어 있다고 말할 때까지 기다릴 필요가있었습니다. 둘째, 장치가 무선 네트워크에서 위치 정보를 가져 오도록 구성되지 않았습니다. 이봐. 이 두 가지 사항을 수정 했으므로 위치 요청은 계속 성공합니다.