我目前正在尝试在Android中执行相对简单的任务。
我想检测无线网络何时完全连接。此刻我不关心是否有互联网连接,我只想知道我的设备被认为连接到网络的确切时刻。
我将尝试描述我的所作所为,以及我失败的可悲之处。
请记住,我在这里尝试过官方建议以及一些答案,但无济于事。
活动注册接收者:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(ReceiverClass,intentFilter);
在我的接收器中,我尝试了this回答
中的内容 NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(info != null) {
if(info.isConnected()) {
// Do your work
Log.d("tag", "connected");
}
}
但我的应用程序没有按预期工作。当我杀了Wifi(从顶部滑动并关闭它)我接收广播(显然),但我的两个If都是低谷,我得到了这个记录! 打开wifi后,我得到另外2个日志,一切都已连接。我尝试了一两件这样的事情
WifiInfo wi = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
if(wi != null) {
SupplicantState ss = wi.getSupplicantState();
Log.d("I am desperate", ss.equals(SupplicantState.COMPLETED));
}
}
但同样的事情发生了。我实现了3次。
我不是android的专家,我相信我错过了一些非常明显的东西。对我有什么帮助吗?
更新
我更考虑这可能是Android系统中的一个问题。目前我停止尝试从Intent获取信息。
我尝试使用EXTRA_WIFI_STATE但命令:
Log.d("WifiState" getIntExtra(WifiManager.EXTRA_WIFI_STATE, -9000));
对于我收到的每个广播,始终记录默认值(-9000)。
如果我尝试SUPPLICANT_CONNECTION_CHANGE_ACTION广播 - 那甚至都没有被抓住。我真的很困惑......
答案 0 :(得分:0)
它正在获得临时状态以及最终状态。你可以这样做:
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
答案 1 :(得分:0)
我遇到了代码问题,但我试图添加一些帮助我的东西。
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_STATE_ENABLED)。
请记住,我使用的是非库存甚至非官方的CM11.0 - 4.4.4并且它有点故障,所以像禁用Wifi这样的控件并不总是按预期工作。
我不知道你是不是设法让它同时工作但是好运呢