2013-08-28 32 views
1

我已經建立了一個名爲NetworkStatus的類,用於監視設備的網絡狀態。在NetworkStatus內,我定義了一個BroadcastReceiver,用於監視是否存在連接變化,即,如果互聯網已被關閉關閉關於。我想將此方法(即onReceive)「公開」給實例化NetworkStatus實例的活動。如何接口接收方法

我試圖通過在NetworkStatus類設立interface來實現這一點,但我不知道如何從BroadcastReceiver即的onReceive方法調用接口,

public class NetworkStatus { 
    public static interface NetworkStatusCallbacks { 
     void onReceive(); 
    } 

    public static class ConnectivityChange extends BroadcastReceiver { 

     public void onReceive(Context context, Intent intent) { 

      // need to call NetworkStatusCallbacks onReceive here 
     } 
    } 

} 

然後在主要活動我會做類似的,

public class MyActivity extends Activity implements NetworkStatus.NetworkStatusCallbacks { 

    @Override 
    public void onReceive() { 
     // Do stuff here 
    } 
} 

真的很感激一些指針。謝謝。

可能的解決方案

想我已經找到了解決辦法。正如Selvin指出的那樣,要做到這一點需要Activity。因此,我通過從被傳遞到用於NetworkStatus類,即一個構造的活動上下文澆鑄獲得的Activity,設置一個構造用於類作爲

private static nsc NetworkStatusCallbacks; 
public NetworkStatus (Context context) { 
    Activity activity = (Activity) context; 
    nsc = (NetworkStatusCallbacks) activity; 
} 

然後我可以調用從的onReceive方法的界面在BroadcastReceiver如下:

public void onReceive(Context context, Intent intent) { 
    nsc.onReceive(); 
} 
+0

簡短的答案是,你不能因爲你沒有在立場的MyAcitivity它將更好地將這些信息存儲在ConnectivityChange.onRecive中的fx數據庫中,並在Activity中讀取這些值... – Selvin

+0

好的。謝謝Selvin。我不能將該活動傳遞給構造函數中的「NetworkStatus」嗎? –

回答

0

嘗試是這樣的:

public class NetworkStatus { 
     public static interface NetworkStatusCallbacks { 
      void onReceive(); 
     } 

     private final NetworkStatusCallbacks m_cb; 

     NetworkStatus(NetworkStatusCallbacks cb) 
     { 
      m_cb=cb; 
     } 

     public static class ConnectivityChange extends BroadcastReceiver { 

      public void onReceive(Context context, Intent intent) { 

       // need to call NetworkStatusCallbacks onReceive here 
       m_cb.onReceive() 
      } 
     } 

    } 
+0

感謝納爾吉斯。但是我得到一個編譯錯誤,即*變量m_cb可能沒有被初始化*? –

+0

是的,我剛剛編輯答案! – Nargis

+0

@Nargis m_cb應該是'ConnectivityChange'而不是'NetworkStatus'(與構造函數相同)的字段......唯一的問題是如果他使用代碼或AndroidManifest.xml設置BroadcastReceiver ...如果在清單中它不會工作... – Selvin