Java 连接/断开Wi-Fi时检测
我想知道手机何时与Wi-Fi失去连接。我知道我应该使用广播接收机。所以我注册了广播接收器:Java 连接/断开Wi-Fi时检测,java,android,android-wifi,Java,Android,Android Wifi,我想知道手机何时与Wi-Fi失去连接。我知道我应该使用广播接收机。所以我注册了广播接收器: intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); registerReceiver(wifiScanReceiver, intentFilter); public class WifiScanReceiver extends BroadcastReceiver { public WifiScanReceiver() {
intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(wifiScanReceiver, intentFilter);
public class WifiScanReceiver extends BroadcastReceiver {
public WifiScanReceiver() {
}
public void onReceive(Context c, Intent intent) {
Log.i("TAG", "trigged");
}
}
然后我创建了广播接收器:
intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(wifiScanReceiver, intentFilter);
public class WifiScanReceiver extends BroadcastReceiver {
public WifiScanReceiver() {
}
public void onReceive(Context c, Intent intent) {
Log.i("TAG", "trigged");
}
}
然后我连接到Wi-Fi,当我打开/关闭路由器时,什么也没发生。我做错了什么
我拥有以下所有权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
尝试使用ConnectionManager类将其放入onReceive中
ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMan.getActiveNetworkInfo();
if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI)
// Connection Successful
else
// Connection Failed
}
由于您已在清单中为Internet和网络访问授予了权限,因此该部分没有问题 此外 您可以尝试使用ConnectivityManager类来检查设备的网络/wifi连接
public boolean checkMobileInternetConn() {
//Create object for ConnectivityManager class which returns network related info
ConnectivityManager connectivity = (ConnectivityManager) _context
.getSystemService(Context.CONNECTIVITY_SERVICE);
//If connectivity object is not null
if (connectivity != null) {
//Get network info - WIFI internet access
NetworkInfo info = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (info != null) {
//Look for whether device is currently connected to WIFI network
if (info.isConnected()) {
return true;
}
}
}
return false;
}
(请参阅完整代码。)
尝试此操作(请随时恢复:)
什么也没发生。我做错了什么
据我所知,您尚未声明广播接收器
,仅添加权限不会触发您的广播接收器
我的解决方案是基于通过清单声明它,但也就是说,您的问题是我看不到您在代码中声明了广播器类,所以您可以选择在清单或代码中声明它
因此,尝试声明它,它应该会起作用。我已经用这两种声明测试了您的代码,它可以正常工作:
<receiver android:name=".WifiScanReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
您的WifiScanReceiver中也需要此()文件:
intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
registerReceiver(wifiScanReceiver, intentFilter);
public class WifiScanReceiver extends BroadcastReceiver {
public WifiScanReceiver() {
}
public void onReceive(Context c, Intent intent) {
Log.i("TAG", "trigged");
}
}
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
if (isWiFi) {
Log.i("TAG", "trigged");
}
}
请确保您已经修改了Internet权限的清单文件。如果还没有。也可能help@eRaisedToX是的,我做到了。你们能检测到互联网吗,我是说除了wifi?当我关闭路由器时,它会返回4次“假”。当设备再次连接时,没有一个是真的。我需要在与WI-FI的连接丢失时返回false,在连接恢复时返回true编辑返回4次,但我只需要一次解决方案,它被调用4次的原因,不,它被调用两次,您可以在这里找到解释