Когда я открываю свое приложение для Android, когда WiFi не подключен, он не показывает WiFi, как я указал в коде
Но когда я подключаю свое приложение к Wi-Fi, оно все еще показывает, что WiFi не подключен, поэтому я должен закрыть приложение и открыть его снова с подключенным WiFi.
if (wifimanager.setWifiEnabled(true)) {
punchin.setOnClickListener {
if ((conMgr.activeNetworkInfo != null) && (wifi.isAvailable == true && wifi.isConnected == true)) {
Log.v("MAc", "mac=" + wMAC + "\n" + wbssid + "\n" + wssid)
if ((wbssid == "") && (wssid.equals(""))
&& conMgr.activeNetworkInfo != null && conMgr.activeNetworkInfo.isAvailable
&& conMgr.activeNetworkInfo.isConnected) {
textView.text = "Connected to correct Wifi"
punchout.visibility = View.VISIBLE
} else if (wbssid!="") {
Toast.makeText(applicationContext, "Connect To Correct Wifi", Toast.LENGTH_LONG).show()
}
} else {
Toast.makeText(this, "No Wifi Connection", Toast.LENGTH_LONG).show()
}
}
}
2 ответа
Решение
Вам нужно добавить получателя, если вы хотите прослушать состояние изменения соединения. Проверьте код ниже -
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkWifiConnectionStatus();
registerBroadCastReceiver();
}
private void registerBroadCastReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(receiver, intentFilter);
}
private void checkWifiConnectionStatus() {
WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiMgr.isWifiEnabled()) {
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
if (wifiInfo.getNetworkId() == -1) {
Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
return;
} else {
Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
return;
}
}
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkWifiConnectionStatus();
}
};
Зарегистрируйте широковещательный приемник в своей деятельности, и в этом приемнике следите за состоянием соединения менеджером соединений, когда изменения состояния соединения вызывают метод для выполнения вашей задачи.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BroadcastReceiver netReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (isConnected) {
try {
performTask(isConnected);
} catch (Exception e) {
e.printStackTrace();
}
} else {
performTask(isConnected);
}
}
};
}
public void performTask(boolean isConnected) {
if (isConnected) {
Log.i("test", "connection successfull");
} else {
Log.i("test", "connection failed");
}
}
и добавьте следующие разрешения в menifest
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />