4

描述

我无法使用Android-12onCapabilitiesChanged中的类中的 WIFI SSID。ConnectivityManager.NetworkCallback在 Android-12 中,不推荐使用 getConnectionInfo。因此,正如 android 文档所建议的那样,我正在尝试WifiInfo使用onCapabilitiesChanged.

像这样,

@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
        super.onCapabilitiesChanged(network, networkCapabilities);
        WifiInfo wifiInfo = (WifiInfo) networkCapabilities.getTransportInfo();
    }

但是,当我打印WifiInfo对象时。它将打印SSID: <unknown ssid>getHiddenSSID返回 true。

意外的行为是,

Android-12 设备与一个 WIFI 连接(例如 ABC)

  • 当我尝试使用getConnectionInfo. 它返回 SSID: ABC 和 getHiddenSSID : false
  • 但是,对于同一个网络,当我尝试使用 获取 WIFI SSID 时 onCapabilitiesChanged,它会返回 SSID: <unknown ssid> 和 getHiddenSSID : true

注意:提供位置权限。

4

2 回答 2

3

花了几天时间,终于找到了为什么我没有进入 SSID 的原因onCapabilitiesChanged

我们需要在创建对象时传入FLAG_INCLUDE_LOCATION_INFO构造ConnectivityManager.NetworkCallback函数。

在默认构造函数中,位置敏感信息是隐藏的,因为我们无法获取 SSID onCapabilitiesChanged。一旦我们NetworkCallback使用标志创建对象,我们将获得 SSID。

关联

于 2021-08-10T06:01:08.843 回答
0

获取 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 API reference.ConnectivityManager.NetworkCallback(int)

于 2021-12-03T18:12:00.147 回答