通知多个网络连接活动

时间:2014-02-27 05:00:14

标签: android wifi android-wifi wifimanager

我的android项目和七项活动中有七项活动,我想监视网络断开连接。我创建了一个networkreceiver类,当启用或禁用wifi时会收到通知。

public class NetworkReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent arg1) {
    ConnectivityManager conMan = (ConnectivityManager) context.
        getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = conMan.getActiveNetworkInfo();
    if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) 
        Log.d("WifiReceiver", "Have Wifi Connection");
    else
        Log.d("WifiReceiver", "Don't have Wifi Connection");    
    }   
}

并在清单

<receiver android:name=".NetworkReceiver" >
    <intent-filter>
         <action android:name="android.net.wifi.STATE_CHANGE" />
         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

我的问题是,由于我创建了它作为一个单独的类,我没有得到如何获取wifi未启用的每个活动的通知。或者我是否必须在每个活动中创建一个网络接收器作为内部类。 / p>

4 个答案:

答案 0 :(得分:1)

我认为处理程序的答案有点臭 - 最大的气味是你必须保持广播接收器的实例 - 在请求实例化的清单接收器。而是在清单中删除注册并注册取消注册接收器onSart / Stop你的活动 - 不需要让接收器成为内部类。取消注册onStop可能无法在Froyo上运行,但是嘿 - 我们在KitKat

这种方式是更好的IMO,因为你应该在它应该发出信号的活动中使用接收器,而不是在接收器类中混合活动和接收器逻辑。另外,如果您设法保留对接收器的引用,请告诉我如何 - 我很好奇

答案 1 :(得分:0)

一个很好的解决方案如下工作。您的广播接收器有一个对象数组(每个活动一个),当通知到达时,您循环访问对象,让他们知道WiFi状态已更改。

详情

首先,您的广播接收器实例应该可用到所有活动(通过静态变量,单身或您想要的)。

其次,每个活动都有一个Handler对象来处理事件,我们称之为mHandler

第三,广播接收者有一个处理程序数组,我们称之为'mHandlerArray'。

在您的广播接收器类中有一个数组的Handler 对象。每个活动通过将指针传递给每个Activity拥有的mHandler来自我订阅。您的广播接收器可以有两种方法:一种是注册,另一种是注销。

因此,每个活动都会实施onResume()onPause()

void onResume()
{
    mBroadcastReceiver.register(mHandler);
}

void onPause()
{
    mBroadcastReceiver.unregister(mHandler);
}

广播接收器执行此操作:

void register(Handler handler)
{
    mHandlerArray.add(handler);
}

void register(Handler handler)
{
    mHandlerArray.remove(handler);
}

最后,当WiFi状态发生变化时,从onReceive()迭代mHandlerArray并向每个处理程序发送一条消息。每个Activity都相应地处理消息。

答案 2 :(得分:-1)

如果您在清单中注册接收器,那么只有定义的类才能接收广播信息。因此,您可以在应用程序类中定义register和unregister选项,然后Broadcast-receiver方法可以保留您的活动类(哪个活动类需要知道网络状态)

答案 3 :(得分:-2)

创建一个单独的类Networkinfo并创建一个方法来检查Internet连接。

如果您想检查互联网,那么您可以使用该类的对象调用此方法。 以下链接将有助于检测连接。

How do I see if Wi-Fi is connected on Android?

祝你好运。