2012-12-05 44 views
1

如果沒有激活的Internet連接,此應用程序無法正常工作。但是,如果防火牆應用程序DroidWall拒絕訪問Internet(防火牆規則),則通過ConnectivityManagerNetworkInfo檢查Internet連接不起作用。如何檢測防火牆阻止了對某些應用程序的Internet訪問?

如何檢測某些防火牆應用程序阻止了Internet應用程序的訪問?

例如,如果我啓動Google Play商店應用,則會明確指出「沒有Internet連接」。如果我啓動我的應用程序,它會掛起(試圖下載內容),然後崩潰並出現錯誤。

編輯

這是錯誤的logcat中捕獲。

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 

正如你看到的,其檢測是否Internet連接(WiFi或移動數據)的機制存在,或作爲應用程序啓動未發生故障的解析器開始下載遠程內容。

我需要實現額外的功能,這將允許互聯網連接機制,以檢查某些應用程序是否被某些防火牆規則阻止(如Play商店應用程序)。

+0

你可以請發佈錯誤?完全例外。 – LonWolf

+0

@LonWolf我已經完成了。 – sandalone

+0

嘗試做我下面的建議。並添加拋出NullPointerException的代碼 - 在mainactivity.java第345-> 367行。很有可能防火牆導致你的連接變量變爲空,而你沒有測試這個。只需檢查它已返回將解決您的問題。 – LonWolf

回答

1

如果您的應用程序崩潰,那麼它會拋出一個您未捕獲的異常。

試着圍繞着你的連接代碼try/catch and pop a toast notification那裏有沒有互聯網連接可用在catch。另外,從調試工具發佈異常?我很好奇你有什麼異常,因爲你沒有發佈任何代碼...

+0

謝謝,但我知道這種做法:)。我曾經有一種方法可以檢測到某些防火牆應用程序阻止訪問。有 – sandalone

+1

有。檢查底層操作系統的iptables。如果您嘗試訪問的網站的IP由某個規則阻止,則它由防火牆應用程序添加 - 當然使用iptables限制訪問。不幸的是,這並不是一件容易的事情,因爲代碼只能在根目錄的手機上運行,​​並且可能會遇到不同修改操作系統的兼容性問題。只需檢查天氣連接是否爲空以找到受限制的互聯網,主機沒有發現您的「故障」部分的異常(錯誤的IP,代碼中的錯誤主機名)或通過您已經使用的方式檢查網絡連接 – LonWolf

+1

Google Play Store默認Android操作系統不會以root身份運行,也不會檢測防火牆,它只是處理異常情況。 – LonWolf