我曾经ConnectivityManager.NetworkCallback
为 android 设备使用连接的 wifi 网络 SSID。我需要为 Android 9.0 及更高版本实现此应用程序。因此我没有使用广播接收器(因为它们已被 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);
这在我打开和关闭 wifi 连接时有效。但是,如果我将连接从一个网络更改为其他网络,这些 Toast 将无法正常工作。那么我该怎么做呢?