2011-07-30 95 views
5

我有一個活動,顯示從服務器獲取的一些數據。如果沒有可用的連接,則活動顯示一些緩存的數據;如果連接可用,則活動獲取數據並顯示它。這一切都按預期工作。
現在,我想讓我的活動在連接發生後立即重新加載數據。我使用一個擴展的BroadcastReceiver一個簡單的接收器:android在活動和廣播接收器之間進行通信

public class ConnectionChangeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager connectivityManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
     if (activeNetInfo != null) { 
      //what to do here? 
     } 
    } 
} 

廣播接收裝置,在我的清單文件中聲明如下:

<receiver android:name=".ConnectionChangeReceiver" 
      android:label="NetworkConnection"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
     </intent-filter> 
</receiver> 

在我的活動,我註冊了接收器:

ConnectionChangeReceiver receiver = new ConnectionChangeReceiver(); this.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

現在,我很困惑接下來該做什麼。當執行onReceive方法時,如何讓我的活動意識到這一點?我知道我可以開始一項新的活動,但那不是我想要的。我應該將ConnectionChangeReceiver聲明爲我的活動的私人類嗎?或者還有其他解決方案嗎?

+1

在您想要了解連接的活動內部創建ConnectionChangeReceiver類,在onRecieve內部,在收到連接信號後更新UI部件。 – sat

回答

11

我認爲將接收器作爲您的活動的私有子類建立是這裏的一種方式。這樣您就可以控制活動中的事件和數據。然後,您可以創建它的一個實例,並按照上面的步驟從代碼註冊接收器。

請注意,您不必在清單和代碼中註冊您的接收器。其中之一就是使用 - 清單基本上是一個「靜態」註冊,而在代碼中進行註冊則允許在運行時進行動態註冊。此外,當您在清單中註冊時,您的接收器的新實例將自動從系統創建,執行並終止。在代碼中執行註冊允許指向一個特定的實例。

+0

非常感謝您的澄清。 – Maggie

+0

+1感謝您澄清。 – AgentKnopf

+0

但如果我不想把廣播接收器放入活動,那麼怎麼辦?任何其他方式來做到這一點.. ?? –