描述
我无法在Android-12的onCapabilitiesChanged类中使用ConnectivityManager.NetworkCallback获得WIFI SSID。在Androd-12中,getConnectionInfo是不受欢迎的。因此,正如android文档所示,我正在尝试使用onCapabilitiesChanged来获取onCapabilitiesChanged对象。
像这样,
@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
WifiInfo wifiInfo = (WifiInfo) networkCapabilities.getTransportInfo();
}但是,当我打印WifiInfo对象时。它将打印SSID:和getHiddenSSID返回true。
意外的行为是,
Androd-12设备连接一个WIFI (Ex )。( ABC)
getConnectionInfo获取WIFI SSID时。它返回SSID: ABC和getHiddenSSID : falseonCapabilitiesChanged获取WIFI SSID时,它将返回SSID:和getHiddenSSID : true注意:提供了位置权限。
发布于 2021-08-10 06:01:08
在花了几天时间之后,终于找到了为什么我没有在onCapabilitiesChanged中获得SSID。
在创建对象时,我们需要在FLAG_INCLUDE_LOCATION_INFO构造函数中传递ConnectivityManager.NetworkCallback。
在默认构造函数中,位置敏感信息是隐藏的,因为我们无法在onCapabilitiesChanged中获得SSID。创建带有标志的NetworkCallback对象后,我们将获得SSID。
发布于 2021-12-03 18:12:00
获取SSID和BSSID API31 Xamarin C#示例
所需权限: CHANGE_NETWORK_STATE、ACCESS_FINE_LOCATION
如果API<31 TransportInfo将返回Null
using Android.Content;
using Android.Net;
using Android.Net.Wifi;
protected override void OnStart()
{
base.OnStart();
NetworkRequest request = new NetworkRequest.Builder().AddTransportType(transportType: TransportType.Wifi).Build();
ConnectivityManager connectivityManager = Android.App.Application.Context.GetSystemService(Context.ConnectivityService) as ConnectivityManager;
NetworkCallbackFlags flagIncludeLocationInfo = NetworkCallbackFlags.IncludeLocationInfo;
NetworkCallback networkCallback = new NetworkCallback((int)flagIncludeLocationInfo);
connectivityManager.RequestNetwork(request, networkCallback);
}
private class NetworkCallback : ConnectivityManager.NetworkCallback
{
public NetworkCallback(int flags) : base(flags)
{
}
public override void OnCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities)
{
base.OnCapabilitiesChanged(network, networkCapabilities);
WifiInfo wifiInfo = (WifiInfo)networkCapabilities.TransportInfo;
if (wifiInfo != null)
{
string ssid = wifiInfo.SSID.Trim(new char[] {'"', '\"' });
string bssid = wifiInfo.BSSID;
}
}
}单击Android reference.ConnectivityManager.NetworkCallback(int)(https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback#NetworkCallback(int%29)!
发布于 2022-08-26 11:58:30
从new NetworkCallback()替换为new NetworkCallback(ConnectivityManager.NetworkCallback.FLAG_INCLUDE_LOCATION_INFO)。
示例代码:
final NetworkRequest request =
new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();
final ConnectivityManager connectivityManager =
context.getSystemService(ConnectivityManager.class);
final NetworkCallback networkCallback = new NetworkCallback(ConnectivityManager.NetworkCallback.FLAG_INCLUDE_LOCATION_INFO) {
...
@Override
void onAvailable(Network network) {}
@Override
void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
WifiInfo wifiInfo = (WifiInfo) networkCapabilities.getTransportInfo();
}
// etc.
};
connectivityManager.requestNetwork(request, networkCallback); // For request
connectivityManager.registerNetworkCallback(request, networkCallback); // For listen参考链接:
https://developer.android.com/reference/android/net/wifi/WifiManager#getConnectionInfo() https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback#NetworkCallback(int)
https://stackoverflow.com/questions/68665456
复制相似问题