连接/断开连接到Wi-Fi时检测

时间:2016-10-12 13:48:47

标签: java android android-wifi

我想知道手机何时失去与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");
    }
}

然后我连接到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" />

3 个答案:

答案 0 :(得分:1)

尝试使用ConnectivityManager类将其置于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 
  } 

答案 1 :(得分:1)

由于您已在Manifest中为Internet和网络访问授予权限,因此该部分没问题。

此外,

您可以尝试使用 ConnectivityManager 类来检查与设备的网络/ WiFi连接。

-d your_database_name -u all

(有关完整代码,请参阅this post。)

试试这个随时回复:)

答案 2 :(得分:1)

  没有任何反应。我做错了什么?

据我所知,您尚未宣布BroadcastReceiver,单独添加权限不会触发您的广播接收器。

我的解决方案是基于通过清单声明它,但是说你的问题是我看不到你在代码中声明了broadcaster类,所以你可以选择在清单或代码中声明它。

因此,尝试声明它,它应该工作。我已经用声明测试了你的代码并且它可以工作:

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

或者在onCreate方法中以编程方式new WifiScanReceiver()声明它:

final IntentFilter filters = new IntentFilter();
filters.addAction("android.net.wifi.STATE_CHANGE");
super.registerReceiver(new WifiScanReceiver(), filters);

您的WifiScanReceiver中也需要这个(reference):

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");
        }
    }
相关问题