如何在Android上运行的Xamarin.Forms中获取当前WiFi信号强度?

jhkqcmku  于 2023-01-15  发布在  Android
关注(0)|答案(1)|浏览(170)

在Xamarin.forms中是否有最新的方法来获取Android设备当前的WiFi信号强度?
以下代码片段改编自文章58191523,内容如下:
名称"GetSystemService"在当前上下文中不存在
名称"WifiService"在当前上下文中不存在
"WiFiManager. CalculateSignalLevel(整数,整数)"已过时:'已弃用'

using Android.Net.Wifi;        
public static void SignalStrengthToConsole()
{
    var wifiMgr = (WifiManager)GetSystemService(WifiService);
    var wifiList = wifiMgr.ScanResults;
    foreach (var item in wifiList)
    {
        var wifiLevel = WifiManager.CalculateSignalLevel(item.Level, 100);
        Console.WriteLine($"Wifi SSID: {item.Ssid} - Strengh: {wifiLevel}");
    }
}
sd2nnvve

sd2nnvve1#

以下是使用弃用功能检索当前Wi-Fi信号强度的步骤:
步骤1:在Android设备上,点击
设置〉位置
然后点击
应用程序权限
向下滚动,直到找到您的应用程序。
点击您的应用程序,然后选择"拒绝"以外的任何选项。
步骤2:确保您的项目AndroidManifest.xml中包含以下内容:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

步骤3:在您希望使用弃用功能捕获Wi-Fi信号强度的类中包含以下代码:

using System;
using System.Linq;
namespace YourNamespaceHere
{
    public static class Device
    {
        private static Android.Net.Wifi.WifiManager deviwifimanager;
        private static Android.Content.Context devicontext;
        public static void PassContext(Android.Content.Context context00)
        {
            devicontext = context00;
            deviwifimanager = (Android.Net.Wifi.WifiManager)devicontext.GetSystemService(Android.Content.Context.WifiService);
            devwifimanager.StartScan();
        }
        public static Int32 SignalStrength()
        {
            Int32 temp00 = 0;
            string text00 = null;
            try
            {
                var wifilist = deviwifimanager.ScanResults;
                foreach (var wifilistitem in wifilist)
                {
                    temp00 = Android.Net.Wifi.WifiManager.CalculateSignalLevel(wifilistitem.Level, 100);
                    text00 = wifilistitem.Ssid;
                    // add your code to process signal level and SSID as required
                }
            }
            catch
            {
                temp00 = 0;
            }
            return temp00;
        }
    }
}

步骤4:在MainActivity.cs的OnCreate方法中添加以下代码:

Device.PassContext(this);

相关问题