java - 检测何时连接/断开 Wi-Fi

标签 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" />

最佳答案

nothing happens. What am I doing wrong?

据我所知,您还没有声明 BroadcastReceiver,单独添加权限不会触发您的广播接收器。

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

所以尝试声明它,它应该可以工作。我已经用这两个声明测试了你的代码并且它有效:

<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");
        }
    }

关于java - 检测何时连接/断开 Wi-Fi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000363/

相关文章:

java - 无法理解这个字谜问题解决方案背后的逻辑

java - ArrayOutOfIndex...正在解析 URL,但不知道每个 HTML 页面的确切索引?

java - Android Facebook 注销 : Where can I make code run when this happens?

java - 如何调整我的 DOMParser 以从 Java (Android) 上的 RSS 解析 "media:content"?

android - 如何以编程方式在 Android 中创建和读取 WEP/EAP WiFi 配置?

java - 使用最后一个 smb jcifs-ng jar 复制文件

android - 我们不能在 Android Studio 中单独启动模拟器吗?

java - onPostExecute 在 fragment Activity 中不起作用

java - 如何在android模拟器中运行wifi管理程序?

java - WiFi 断开时播放音乐