Я использовал ConnectivityManager.NetworkCallback
, чтобы взять SSID подключенной сети Wi-Fi для устройств Android. Мне нужно реализовать это приложение для Android 9.0 и выше. Поэтому я не использовал Broadcast Receivers (потому что они устарели до Android 9.0). Вместо этого я использовал ConnectivityManager.NetworkCallback
. следующим образом.
package com.example.myapplication;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkRequest;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ConnectivityManager connectivityManager;
ConnectivityManager.NetworkCallback networkCallback;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest networkRequest = new NetworkRequest.Builder().build();
networkCallback = new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(Network network) {
WifiManager wifiManager;
String connectedSsid = null;
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
connectedSsid = info.getSSID();
if (connectedSsid != null) {
Toast.makeText(getApplicationContext(), "*******" + connectedSsid + "**********", Toast.LENGTH_LONG).show();
}
}
@Override
public void onLost(Network network){
Toast.makeText(getApplicationContext(), "*******DIS!! connected**********", Toast.LENGTH_LONG).show();
}
};
connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onStop(){
super.onStop();
connectivityManager.unregisterNetworkCallback(networkCallback);
}
}
Я добавил необходимые разрешения в AndroidManifest следующим образом,
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Я зарегистрировал это в методе onCreate
как,
connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
и незарегистрированный в методе onStop
как,
connectivityManager.unregisterNetworkCallback(networkCallback);
Это работает, когда я включаю и выключаю соединение Wi-Fi. Но если я переключаю соединение из одной сети в другую, эти тосты не работают. Так что я должен сделать для этого?