2014-11-02 120 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