首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Android 12中使用onCapabilitiesChanged获得WIFI SSID

无法在Android 12中使用onCapabilitiesChanged获得WIFI SSID
EN

Stack Overflow用户
提问于 2021-08-05 11:09:35
回答 3查看 2.6K关注 0票数 8

描述

我无法在Android-12的onCapabilitiesChanged类中使用ConnectivityManager.NetworkCallback获得WIFI SSID。在Androd-12中,getConnectionInfo是不受欢迎的。因此,正如android文档所示,我正在尝试使用onCapabilitiesChanged来获取onCapabilitiesChanged对象。

像这样,

代码语言:javascript
复制
@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 : false
  • 但是,对于同一个网络,当我尝试使用onCapabilitiesChanged获取WIFI SSID时,它将返回SSID:和getHiddenSSID : true

注意:提供了位置权限。

EN

回答 3

Stack Overflow用户

发布于 2021-08-10 06:01:08

在花了几天时间之后,终于找到了为什么我没有在onCapabilitiesChanged中获得SSID。

在创建对象时,我们需要在FLAG_INCLUDE_LOCATION_INFO构造函数中传递ConnectivityManager.NetworkCallback

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

链接

票数 8
EN

Stack Overflow用户

发布于 2021-12-03 18:12:00

获取SSID和BSSID API31 Xamarin C#示例

所需权限: CHANGE_NETWORK_STATE、ACCESS_FINE_LOCATION

如果API<31 TransportInfo将返回Null

代码语言:javascript
复制
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)!

票数 0
EN

Stack Overflow用户

发布于 2022-08-26 11:58:30

new NetworkCallback()替换为new NetworkCallback(ConnectivityManager.NetworkCallback.FLAG_INCLUDE_LOCATION_INFO)

示例代码:

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68665456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档