繁体   English   中英

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

[英]How to get current WiFi signal strength in Xamarin.Forms running on Android?

对于 Android 设备,是否有最新的方法来获取 Xamarin.Forms 中的当前 WiFi 信号强度?

下面的代码片段改编自文章 58191523 说:

当前上下文中不存在名称“GetSystemService”

当前上下文中不存在名称“WifiService”

'WiFiManager.CalculateSignalLevel(int, int)' 已过时:'已弃用'

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}");
    }
}

以下是使用已弃用功能检索当前 Wi-Fi 信号强度的步骤:

第 1 步:在 Android 设备上,点击

设置 > 位置

然后点击

应用权限

向下滚动,直到找到您的应用程序。

点击您的应用程序和 select 除“拒绝”以外的任何选项。

第 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 步:在 class 中包含以下代码,您希望在其中使用已弃用的功能捕获 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;
        }
    }
}

第四步:在MainActivity.cs的OnCreate方法中添加如下代码:

Device.PassContext(this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM