2011-02-23 1 views
0

OS : 안드로이드Android에서 네트워크 연결 감지 중

감안할 때 : 사용자, 그들은 업데이트를 받기 위해 응용 프로그램의 서버에 연결된 상태를 유지하고자한다는 등

목표를 밝혔습니다 : 응용 프로그램이 백그라운드에서 경우에도 사용자가 응용 프로그램의 서버에 연결되어 있는지 확인하려면 상태.

질문 : 가끔 네트워크 연결이 끊기는 것이 하나의 문제입니다. 사용자가 데이터 네트워크 연결이 끊어지면 (2G, 3G, WiFi 손실) 연결이 다시 복구되면 연결이 끊어집니다. 현재 다양한 네트워크 변경을 감지하고 적절할 때 서버와의 연결을 다시 시작하기 위해 PhoneStateListener을 사용하려고합니다. Nexus One (2.1)에서 청취자가 원래 등록되었을 때를 제외하고는 onSignalStrengthsChangedonDataConnectionStateChanged이 호출되지 않습니다. 청취자는 서비스 내부에 등록되므로 서비스가 살아있는 한 계속 청취합니다 (이 질문의 목적을 위해 '영원히'있다고 가정 할 수 있음). 다른 사람이 데이터 연결 상태를 청취하는 데 문제가 있습니까?

onServiceStateChanged은 지금까지 가장 신뢰할만한 것으로 보이지만 다른 청취자와 마찬가지로 성공했는지 알고 싶었습니다.

답변

2

StackOverflow의 날 그렇지 않으면 질문을 종료하는 것을 허용하지 않기 때문에, 나는 나의 PhoneStateListeners가 작동하지 않는 이유에 대한 해답 제공 :

을 내 문제는 단순히 비트 방식으로 청취자를 등록하지 않고 오히려 연속적으로 등록하는 것이 었음을 발견했습니다 (올바른 것 대신에
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
telephonyManager.listen(listener, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
.
.
.

).
telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE..............);)

나는이 질문을 끝내고 나중에 Android에서 서버에 '항상 살아있는'연결을 유지하는 데 대한 디자인 제안을 요청하는 다른 질문을 엽니 다. 감사.

2

정기적으로 keepalive 메시지를 보내어 연결이 아직 있는지 확인해야합니다. 그렇지 않은 경우 다시 설정하십시오. 귀하의 연결이 끊어 질 수있는 이유에 대한 이야기가 있으며 귀하는 그러한 모든 클라이언트 측을 점검 할 수 없습니다.

Google 클라우드 서비스는 이미 연결을 유지하기 때문에 수행중인 작업에 대해 Google의 클라우드 서비스를 사용할 수도 있습니다. 그 방법은 귀하의 사용자의 휴대 전화는 (매우 비쌀 수 있습니다) 아직 주위에 또 다른 연결을 유지하는 오버 헤드가되지 않습니다

0

지금까지 내가 청취자는 애플 리케이션이 백그라운드에있을 때 호출 할 수 없습니다. 활동이 아닌 서비스를 사용해보십시오. 또한

그리고 적절한 방법으로 TelephonyManager를 검색하기 위해 기억

TelephonyManager mTelephonyMgr = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE); 
+0

나는 리스너가 서비스 내부에 등록되었다고 말하고자했다. 그 점을 지적 해 주셔서 고맙습니다. (질문이 수정되었습니다). – ChaimKut

0

나는 이것을 위해 ConnectivityManager를 사용할 것이라고 생각합니다.

네트워크 연결 상태에 대한 쿼리에 응답하는 클래스입니다. 또한 네트워크 연결이 변경 될 때 응용 프로그램에 알립니다. Context.getSystemService (Context.CONNECTIVITY_SERVICE)를 호출 해,이 클래스의 인스턴스를 취득합니다.워드 프로세서 당

http://developer.android.com/reference/android/net/ConnectivityManager.html

, 그것은 네트워크 연결을 모니터하고 애플리케이션에 변화 방송 의도를 전송한다.