android – 检测到从WiFi接入点断开连接

前端之家收集整理的这篇文章主要介绍了android – 检测到从WiFi接入点断开连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用BroadcastReceiver来检测手机何时与WiFi接入点断开连接.为此,我在清单中注册了我的BroadcastReceiver:
<receiver android:name="com.eshayne.android.WiFiBroadcastReceiver">
    <intent-filter>
        <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>@H_403_3@ 
 

在我的WiFiBroadcastReceiver类中,我正在检查一个NETWORK_STATE_CHANGED_ACTION操作,并查看NetworkInfo的详细状态:

if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
    NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
    android.util.Log.d("com.eshayne.android.WiFiBroadcastReceiver","network state change - detailedState=" + info.getDetailedState() + ": " + info.toString());
    if (info.getDetailedState() == DetailedState.DISCONNECTED) {
        ...
    }
    else if (info.getDetailedState() == DetailedState.CONNECTED) {
        ...
    }@H_403_3@ 
 

我看到的问题是,当手机离开WiFi接入点的范围时,我的“断开连接”回调将被调用6次 – 在每次停止之前,每隔15秒定期关闭一次.到目前为止,我无法在每个回调的NetworkInfo之间找到任何区别的特征.正在写入日志的每个NetworkInfo对象如下所示:

02-18 10:16:51.918 D/com.eshayne.android.WiFiBroadcastReceiver( 1511): network state change - detailedState=DISCONNECTED: NetworkInfo: type: WIFI[],state: DISCONNECTED/DISCONNECTED,reason: (unspecified),extra: (none),roaming: false,failover: false,isAvailable: true@H_403_3@ 
 

在WiFi范围内移动的手机也不是一个问题,因为在“断开连接”回调之间没有调用“连接”回调.任何其他国家之间也不会触发任何其他国家.只是一系列6个回调,每个回调都有一个DISCONNECTED的详细状态.

有没有更好的方法来检测手机何时丢失了WiFi连接,这样我的回调只能在断开连接时被调用一次?或者任何方式来检测我看到的6个回调中的哪一个是“最终的”?

解决方法

你说这是一个“6连接回调的快速系列”,但是如果/ else-if仅对DISCONNECTED和CONNECTED进行检查,那么看起来像没有默认的块来处理所有其他情况.从 NetworkInfo.DetailedState api页面,可以由NetworkInfo.getDetailedState()返回的10个可能的状态,包括“连接”,“扫描”,“断开连接”,所有这些状态对于刚刚从网络.

抛出一个默认情况,提醒您WiFi状态的任何更改,而不仅仅是“CONNECTED”和“DISCONNECTED”.你可能会发现手机在几种不同的状态之间转动,而不仅仅是在你六次的同时一个.希望从那里开始,你的代码如何进行会更清楚一些.

猜你在找的Android相关文章