2011-06-25 28 views
0

我有幾個定時器可以通過互聯網查詢信息。當我嘗試這樣做時出現錯誤時,我檢查網絡連接,如果它不可用,則停止計時器。我的問題是,我想在網絡再次可用時重新啓動定時器。如何在沒有其他運行時監視連接更改

問題是,如果網絡消失並且很長一段時間沒有回來,那麼我運行的應用程序的每個部分可能已經被殺死了。我的問題是...我在哪裏創建我的網絡連接更改接收器,以便它始終能夠響應這些事件?顯然不在一項活動中。

我最初把它放在一個擴展的應用程序類。我不確定這是否正確,現在我發現即使消失了,但隨時都會在應用程序的某些部分被利用時再次創建。那麼這仍然是正確的地方?

我也有點困惑......我曾想過創建一個獨立的接收器類來監視網絡的變化,然後重新啓動定時器,如果它有連接消息。但後來我想......這會怎樣實例化呢?如果什麼都沒有,那麼它將如何工作?但同樣的問題,然後去我的OnBootReceived類....我什麼都沒有做任何實例化該類的任何地方,並註冊它,但它仍然有效! (除了將其放入AndroidManifest和BOOT_COMPLETED意圖過濾器)。那種接收器是特殊的嗎?我試圖用我的網絡更改接收器做同樣的事情,但它從未響應任何網絡更改。當我最終把它放入我的應用程序類中時,實例化它並註冊它,然後它接收到廣播。

我有代碼,但這是一種代碼無關的問題。我試圖清除我的代碼在哪裏。如果我過去了,它仍然不起作用,我可以發佈它。

所以,我差不多瞭解。如果我在代碼中只做了這些事情,那麼在連接狀態更改時是否會收到消息?因爲如果是這樣,我不是收到任何,這是我的。

或者我需要在啓動時註冊嗎?該視頻提到使用清單意圖過濾器在應用程序未運行時獲取更新,但未顯示它是否仍需要以某種方式註冊(如果您註冊,是不是註冊實例,以及是否所以,不就是實例消失時,無論對象是你在註冊它消失)

代碼:

public class NetworkConnectivityReceiver extends BroadcastReceiver { 

    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) { 



     Log.d(TAG, "Connection message received."); 

    } 

} 


    <receiver android:name=".NetworkConnectivityReceiver" > 
     <intent-filter> 
      <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION"></action> 
     </intent-filter> 
    </receiver> 

回答

1

看看谷歌從下面的視頻IO 2011年,圍繞它涵蓋了28mins連接變化,當我這樣做時幫助我很多。

你可能需要使用一個Intent來監視連接的變化,建立一個未決的意圖廣播每當連接的變化,然後設置一個廣播接收器來處理變化。 (視頻顯示的東西類似,但位置變化在22分鐘左右)

+0

現在看它....謝謝! – Rob

+0

我看過相關部分,但我仍然以某種方式忽略它。更新了無法執行任何代碼的問題。 – Rob

+0

好吧,似乎我在那裏有錯誤的意圖過濾器,並且不知何故,它從來不是問題,因爲我正在實例化和註冊接收器。現在我不這樣做,只使用.manifest,我必須使用這個: 它看起來像我想要的一樣工作...我的應用程序不需要開始,然後我收到這些廣播消息。感謝您的谷歌IO視頻鏈接,這是真棒,我要去開始觀看所有這些。 – Rob

相關問題