尝试检测Wifi网络何时连接android时的奇怪行为
我目前正在尝试用Android做一个相对简单的任务 我想检测无线网络何时完全连接。此时此刻,我不在乎是否有互联网连接,我只想知道我的设备被认为连接到网络的确切时间 我将试着描述我做了什么,以及我失败的悲惨程度 请记住,我在这里尝试过官方建议和一些答案,但都没有用 活动寄存器接收器:尝试检测Wifi网络何时连接android时的奇怪行为,android,broadcastreceiver,android-wireless,Android,Broadcastreceiver,Android Wireless,我目前正在尝试用Android做一个相对简单的任务 我想检测无线网络何时完全连接。此时此刻,我不在乎是否有互联网连接,我只想知道我的设备被认为连接到网络的确切时间 我将试着描述我做了什么,以及我失败的悲惨程度 请记住,我在这里尝试过官方建议和一些答案,但都没有用 活动寄存器接收器: IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACT
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(ReceiverClass,intentFilter);
在我的听筒里,我试过答案里的东西
但我的应用程序没有按预期工作。当我从顶部关闭Wifi并关闭它时,我收到一个明显的广播,但我的两个If都会失效,我会将其记录下来!
打开wifi后,我又收到了两条日志,所有东西都已连接。我试过一两件这样的事
WifiInfo wi = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
if(wi != null) {
SupplicantState ss = wi.getSupplicantState();
Log.d("I am desperate", ss.equals(SupplicantState.COMPLETED));
}
}
但同样的事情也发生了。我实现了三次
我不是安卓方面的专家,我相信我遗漏了一些非常明显的东西。有什么帮助吗
更新
我正在考虑这可能是安卓系统的一个问题。此刻,我不再试图从Intent那里获取信息
我已尝试使用以下命令:
Log.d("WifiState" getIntExtra(WifiManager.EXTRA_WIFI_STATE, -9000));
记录我收到的每一次广播的默认值-9000
如果我尝试广播,那就永远不会被发现。我真的很困惑…它得到的是过渡状态和最终状态。您可以这样做:
public class WiFiConnections extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info != null && info.isConnectedOrConnecting()) {
if (info.isConnected()) {
Log.i("WiFi", "connected");
}
}
else{
Log.i("WiFi", "disconnected");
}
}
}
}
我刚刚测试了这个,下面是结果日志:
04-17 14:55:31.479 13780-13780/com.wifitest.danu.wifitext I/WiFi﹕ disconnected
04-17 14:57:20.489 15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ connected
04-17 14:57:34.769 15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ disconnected
04-17 14:57:51.349 15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ connected
04-17 14:58:38.069 15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ disconnected
04-17 14:58:52.489 15740-15740/com.wifitest.danu.wifitext I/WiFi﹕ connected
我对下面的代码有问题,但我试图添加一些对我有帮助的东西
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(info != null) {
WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
boolean wen = wifi.isWifiEnabled();
if(info.isConnected()) {
// Do your work.
Log.wtf("Wifi", "Connected");
// e.g. To check the Network Name or other info:
//WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
//WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//String ssid = wifiInfo.getSSID();
}
else if(!(wen)){
Log.wtf("Wifi", "No");
}
}
}
}
据我在Android上注意到的,Wifi不会立即禁用。它有一些子状态,如启用和禁用,将记录为启用
这是按预期记录连接,但有时不是按预期记录断开连接,实际上什么也没有记录,至少不是垃圾邮件连接/否。我在关闭时检查了多个Wifi状态,但有时在尝试通过getWifiState访问时,它只是停留在启用状态3/Wifi_状态_启用
请记住,我使用的是非库存甚至非官方的CM11.0-4.4.4,它有点被窃听,所以禁用Wifi之类的控件并不总是像预期的那样工作
我不知道您是否同时成功地使其工作,但祝您好运当您未连接时,它是否已连接日志?我已关闭WiFi并连接广播接收器日志Daniel我也尝试与&&operator一起执行此操作。。。是不是跟ROM有关?我使用的是stock nexus设备…不,我有你的c/p解决方案。当我关闭wifi时,我得到1个已连接的o.o和3个已断开的连接。当我重新打开它时,我会连接到4x。。。我不明白really@Rouz这很奇怪。你使用的是什么版本的Android?我的测试是在4.4.2.5.1中进行的,但我在4.4.4中也看到了这一点。虽然根据文档,它应该可以正常工作,但它并没有按照预期工作。我想知道何时连接,使用此解决方案,我可以多次连接。
public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(info != null) {
WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
boolean wen = wifi.isWifiEnabled();
if(info.isConnected()) {
// Do your work.
Log.wtf("Wifi", "Connected");
// e.g. To check the Network Name or other info:
//WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
//WifiInfo wifiInfo = wifiManager.getConnectionInfo();
//String ssid = wifiInfo.getSSID();
}
else if(!(wen)){
Log.wtf("Wifi", "No");
}
}
}
}