2014-11-02 188 views
0

我有下面的類,用於連接監聽廣播接收機安卓:不工作

public class connectionListener{ 
    public ConnectivityManager conMgr; 
    public htmlParserListener vystrahyListener; 
    public htmlParserListener podmienkyListener; 
    private ConnectivityBroadcastReceiver mReceiver; 

    public connectionListener(ConnectivityManager conMgr, htmlParserListener vystrahyListener, htmlParserListener podmienkyListener){ 
     this.conMgr = conMgr; 
     this.vystrahyListener = vystrahyListener; 
     this.podmienkyListener = podmienkyListener; 
    } 

    private class ConnectivityBroadcastReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      System.out.println("connected"); 
     } 
    } 
    public synchronized void startListening(Context context) { 
      IntentFilter filter = new IntentFilter(); 
      filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
      context.registerReceiver(mReceiver, filter); 
      System.out.println("start"); 
     } 
    } 

我用這個代碼(由MainActivity)實例吧:

connectionListener conLst = new connectionListener(conMgr, vystrahyListener, podmienkyListener); 
    conLst.startListening(this); 

但是我得到的「開始」,在輸出,所以startListening方法起作用,但當我禁用或啓用移動數據時,我不會「連接」。所以它看起來像我的BroadcastReceiver不工作。我究竟做錯了什麼?

感謝在前進

+0

你有沒有在manifest中使用權限。 – Chitrang 2014-11-02 11:31:43

+0

是的,我已經把它放在那裏 – horin 2014-11-02 11:45:09

+0

張貼你的清單或檢查你的清單接收者的意圖 – 2014-11-02 12:16:51

回答

1

我不要讓她的「連接」,當我禁用或啓用移動數據。

這是正確的。當啓用或禁用移動數據時,但僅在網絡連接更改時纔會觸發Broadcast

因此它看起來像我的BroadcastReceiver不工作。我究竟做錯了什麼?

您的BroadcastReceiver工作正常。但是,您期望CONNECTIVITY_ACTIONBroadcast在未觸發事件時被觸發。

注意:當移動數據的啓用狀態發生變化時,不存在(其他)Broadcast。您也無權爲此更改註冊Listener

+0

解釋...我試圖做一些像facebook messenger刷新方法。當你沒有互聯網啓動應用程序時,它說你沒有連接,但只要我打開移動數據或WiFi等它說連接。所以我想做同樣的事情,但我只需要在建立連接後運行一個asynctask ...您能否提出一種有效地完成此操作的方法(最好不使用服務)? – horin 2014-11-02 15:57:08

+1

您可以使用原始問題中的方法。當連接發生變化時,您的BroadcastReceiver將被調用。如果您在已連接的情況下(例如通過Wi-Fi)切換移動數據,則不會發生這種情況。請期待連接更改與您的Receiver被調用之間的延遲。 – cygery 2014-11-02 16:33:38