2012-12-05 2 views
1

이 앱은 인터넷 연결을 사용하지 않으면 작동하지 않아야합니다. 그러나 DroidWall과 같은 방화벽 응용 프로그램이 인터넷에 대한 액세스를 거부 한 경우 (방화벽 규칙) ConnectivityManagerNetworkInfo을 통한 인터넷 연결 확인은 작동하지 않습니다.방화벽이 일부 앱에 대한 인터넷 액세스를 차단했음을 감지하는 방법은 무엇입니까?

일부 방화벽 앱이 내 앱에 대한 인터넷 액세스를 차단 한 것을 어떻게 감지합니까?

예를 들어 Google Play 스토어 앱을 시작하면 '인터넷에 연결되지 않음'이라고 분명히 표시됩니다. 내 앱을 시작하면 멈추고 (콘텐츠 다운로드를 시도한 후) 오류가 발생하여 충돌이 발생합니다.

편집

이 로그 캣에 의해 체포 오류입니다. 보시다시피

12-05 12:44:51.417: E/AndroidRuntime(18922): java.lang.RuntimeException: An error occured while executing doInBackground() 
12-05 12:44:51.417: E/AndroidRuntime(18922): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.lang.Thread.run(Thread.java:856) 
12-05 12:44:51.417: E/AndroidRuntime(18922): Caused by: java.lang.NullPointerException 
12-05 12:44:51.417: E/AndroidRuntime(18922): at com.app.android.MainActivity$ParserAsyncTask.doInBackground(MainActivity.java:345) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at com.app.android.MainActivity$ParserAsyncTask.doInBackground(MainActivity.java:367) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
12-05 12:44:51.417: E/AndroidRuntime(18922): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
12-05 12:44:51.417: E/AndroidRuntime(18922): ... 5 more 

, 인터넷 연결 (와이파이 또는 모바일 데이터) 여부를 감지하는 메커니즘이 존재하거나 응용 프로그램이 시작된으로 실패하지 파서 원격 콘텐츠를 다운로드 시작했다.

일부 앱이 Play 스토어 앱처럼 일부 방화벽 규칙에 의해 차단되는지 여부를 확인하는 인터넷 연결 메커니즘을 허용하는 추가 기능을 구현해야합니다.

+0

오류를 게시 할 수 있습니까? 전체 예외. – LonWolf

+0

@LonWolf 해냈어. – sandalone

+0

내가 아래에 제안한 것을 시도하십시오. 그리고 mainactivity.java 줄 345-> 367에서 NullPointerException을 던지는 코드를 추가합니다. 대부분의 경우 방화벽이 연결 변수를 null로 만들고이를 테스트하지 않습니다. 반환 된 내용을 확인하기 만하면 문제가 해결됩니다. – LonWolf

답변

1

응용 프로그램이 충돌하는 경우 잡히지 않는 예외가 발생합니다.

연결 코드를 try/catch and pop a toast notification으로 둘러싸면 인터넷 연결이 불가능합니다. 캐치 안에이 있습니다. 또한 디버깅 도구에서 예외를 게시 하시겠습니까? 어떤 코드를 게시하지 않았기 때문에 어떤 예외가 발생하는지 궁금합니다.

+0

고마워요.하지만이 접근법을 알고 있습니다. :) 일부 방화벽 앱이 액세스를 차단하고 있음을 감지하는 방법이 있습니다. – sandalone

+1

있습니다. 기본 OS의 iptables를 확인하십시오. 도달하려는 웹 사이트의 IP가 규칙에 의해 차단 된 경우 iptables를 사용하여 물론 액세스를 제한하는 방화벽 응용 프로그램에 의해 추가되었습니다. 유감스럽게도 코드가 루팅 된 휴대 전화에서만 실행되므로 다른 modded OS와의 호환성 문제가 발생할 가능성이 있으므로 쉬운 일이 아닙니다. 단순히 연결이 null 인 경우 제한된 인터넷을 찾으려면 "연결 오류"(잘못된 IP, 잘못된 호스트 이름) 또는 이미 사용하는 방법으로 네트워크 연결을 확인하십시오. – LonWolf

+1

기본 Android OS에서 Google Playstore 루트로 실행되지 않고 방화벽을 감지하지 못하면 단순히 예외를 처리합니다. – LonWolf

관련 문제