如果出现“WiFi断开然后蓝牙打开”功能怎么办?
所以这是我想到的解决方案:
首先,您需要创建一种机制来监听 Wi-Fi 网络连接的变化。是的,我说的是带有适当意图过滤器的 BrodcastReceiver。所以首先我们需要定义我们的接收器来监听网络变化。
我提到了意图过滤器。一目了然的意图过滤器-> 你可以把它们想象成“事件”,每个接收器可以注册一个或多个事件,当事件被触发并且接收器能够监听它(已分配该事件)时,将立即调用。
特别是在您需要此事件(通常称为操作)来侦听 Wi-Fi 连接变化的情况下:
<action android:name="android.net.wifi.STATE_CHANGE" />
您可以通过源代码检索相同的操作:
WifiManager.NETWORK_STATE_CHANGED_ACTION
那么你几乎拥有了所有你需要的东西。但现在您需要在我们的接收器中检索 Wi-Fi 连接的实际状态。
答案是使用 NetworkInfo 类来包装有关网络的信息。您可以从上述操作中获得此对象(请参阅答案末尾的最终源代码)。
这里很简单,当 Wi-Fi 状态将断开时,您只需启用蓝牙即可。
这是最终的源代码:
public class NetworkReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// action when network connectivity changed
if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
// gets network info from intent action
NetworkInfo ni = intent.getParcelableExtra(
WifiManager.EXTRA_NETWORK_INFO);
// if network state is disconnecting or disconnected
if (ni.getDetailedState().equals(DetailedState.DISCONNECTING)
|| ni.getDetailedState().equals(DetailedState.DISCONNECTED)) {
// turns Bluetooth on
}
}
}
}
注意事项:
1.我已经做了一些测试,现在我知道在 Android 中您只能使用 getState() 和 getDetailedState() 检测这些网络状态:
CONNECTED CONNECTING DISCONNECTED OBTAINING_IPADDR 和 CAPTIVE_PORTAL_CHECK 所有其他状态都不能正常工作或只能工作一些不是很好但我们无能为力的设备(Google 团队除外)。
2.不要忘记为您的 manifest.xml 添加适当的权限,以便能够读取网络的当前状态等。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
3.我建议你看看BroadcastReceivers、Intents and Intent Filters和Wi-Fi相关的东西。
希望对你有帮助。