這裏工作是我想達到什麼:附表上網時熄滅了AndroidØ
- 監視網絡狀態的背景。
- 當設備沒有互聯網。
- 觸發作業。
Currently我看看,有沒有可能時,裝置會「沒有互聯網」狀態觸發任務。任何解決方法或解決方案?
注:我不喜歡通過前臺服務監測設備的互聯網連接。
這裏工作是我想達到什麼:附表上網時熄滅了AndroidØ
Currently我看看,有沒有可能時,裝置會「沒有互聯網」狀態觸發任務。任何解決方法或解決方案?
注:我不喜歡通過前臺服務監測設備的互聯網連接。
以下是您可以隨意使用的任何地方,但請記住它至少應該啓動一次,這意味着要麼將其放入onCreate
中,要麼在方法中調用該方法至少一次。
Handler handler = new Handler();
int timeDelay = 5000; //5 seconds
handler.postDelayed(new Runnable(){
public void run(){
if(!isOnline)
{
yourMethodCall();
}
handler.postDelayed(this, timeDelay);
}
}, delay);
public boolean isOnline() throws InterruptedException, IOException {
String command = "ping -c 1 google.com";
return (Runtime.getRuntime().exec(command).waitFor() == 0);
}
這是將檢查工作每5秒互聯網連接,如果連接不工作,然後它會調用你的方法,它的代碼。此外,請注意Handler代碼將被放置在方法中,而isOnline()是一種方法。
在這裏工作是突出顯示的,因爲檢查互聯網連接的最常見方法實際上如果WiFi沒有互聯網連接(基本上沒有互聯網熱點)返回true。但是因爲你只是想檢查沒有連接,你也可以使用這個代碼。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
但是,如果採用這種方式,你必須申報在AndroidManifest.xml權限是<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
利用這一點,將工作的偉大。
是的,它會在後臺運行。在我的應用程序中沒有問題,但有些用戶報告說,使用ping檢查連接的方法isOnline()
有時會在線程未收到ping 5秒的情況下凍結線程。所以,如果這發生在你身上,你將不得不使用isNetworkAvailable()方法,直到isOnline()
更好。
編輯 -
當Android References看,我發現這一點: void onDataConnectionStateChanged (int state)
這可以用來確定網絡狀態的變化。 默認狀態是:
DATA_DISCONNECTED
DATA_CONNECTING
DATA_CONNECTED
DATA_SUSPENDED
感謝您的代碼。但是這會在'main'線程中運行。我要做的是在單獨的工作線程上運行它。我猜除了定期網絡檢查沒有其他辦法 –
正如你所做的一樣,無論是使用定時器還是使用Alarm Manager或Handler,因爲沒有像NetworkStateChangeListener那樣的,所以從這三者中,最好是Handler,如果延遲小於10分鐘。 –
@Shaileshmota我剛剛在Android引用中找到並找到[this](https://developer.android.com/reference/android/telephony/PhoneStateListener.html#onDataConnectionStateChanged(int)),這可能很有用。 –
我知道你已經說你不會喜歡前臺服務,但你不介意使用一個處理器的postDelayed爲每分鐘或10分鐘上網查是否連接不和如果斷開連接,則調用方法。 –
'處理程序允許您發送和處理與線程的MessageQueue關聯的消息和可運行對象。所以一個處理程序與一個線程相關聯。我應該使用哪個線程進行定期檢查?如果我在'main'線程上做這樣的操作不會是濫用資源嗎?爲了實現細緻的控制,我甚至可能需要每5秒鐘進行一次這種定期檢查。 –
用我正在使用的類似的東西來回答。 –