Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接/断开Wi-Fi时检测_Java_Android_Android Wifi - Fatal编程技术网

Java 连接/断开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() {

我想知道手机何时与Wi-Fi失去连接。我知道我应该使用广播接收机。所以我注册了广播接收器:

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次的原因,不,它被调用两次,您可以在这里找到解释