我正在寻找一种方法来检查手机的Wi-Fi是否在Dote NET MAUI中打开或关闭。互联网连接状态并不重要,但我只需要检查 Wi-Fi 状态。
我使用“WifiManager”并遇到了指向空值的警告,当然程序在运行和模拟时总是遇到空值。
我把测试的方法写在下面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WifiTest9
{
public interface IWifiService
{
bool IsWifiEnabled();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Android.Content;
using Android.Net.Wifi;
using WifiTest9.Platforms.Android;
using Microsoft.Maui;
using Microsoft.Maui.Controls;
[assembly: Dependency(typeof(WifiService))]
namespace WifiTest9.Platforms.Android
{
public class WifiService : IWifiService
{
public bool IsWifiEnabled()
{
var currentActivity = Platform.CurrentActivity;
var wifiManager = (WifiManager)currentActivity.GetSystemService(Context.WifiService);
return wifiManager.IsWifiEnabled;
}
}
}
我在下面重写的这两行代码与我们遇到空值警告的两行代码相同。
var wifiManager = (WifiManager)currentActivity.GetSystemService(Context.WifiService);
return wifiManager.IsWifiEnabled;
private void Button_Clicked(object sender, EventArgs e)
{
CheckWiFiStatus();
}
private void CheckWiFiStatus()
{
var wifiService = DependencyService.Get<IWifiService>();
bool isWifiEnabled = wifiService.IsWifiEnabled();
if (isWifiEnabled)
{
wifiStatusLabel.Text = "Wifi is ON";
}
else
{
wifiStatusLabel.Text = "Wifi is OFF";
}
}
另外,我在微软文档中找到了另一种方法,但不知道如何使用,下面将附上代码的链接放上。
public virtual bool IsWifiEnabled { [Android.Runtime.Register("isWifiEnabled", "()Z", "GetIsWifiEnabledHandler")] get; }
另外,我在微软文档中找到了另一种方法,但是我 不知道怎么用
您可以通过调用平台代码来实现这一点。
基于官方示例代码InvokePlatformCodeDemos,我这边实现了这个功能,大家可以参考以下代码:
1.在文件夹
WifiStateService.cs
上创建一个类
Services.ConditionalCompilation
namespace InvokePlatformCodeDemos.Services.ConditionalCompilation
{
public class WifiStateService
{
public bool GetWifiStateEnabled() {
#if ANDROID
bool isEnabled = false;
WifiManager wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);
isEnabled = wifiManager.IsWifiEnabled;
return isEnabled;
#endif
}
}
}
2.在
MainPage
页面添加一个按钮,并调用上面定义的WifiStateService
。
using ConditionalCompilationWifiStateService = InvokePlatformCodeDemos.Services.ConditionalCompilation.WifiStateService;
private void Button_Clicked_CheckWifiState(object sender, EventArgs e)
{
var wifiStateService = new ConditionalCompilationWifiStateService();
bool wifiIsEnabled = wifiStateService.GetWifiStateEnabled();
System.Diagnostics.Debug.WriteLine(" the value of wifiIsEnabled is: " + wifiIsEnabled);
}
注:
记得在android平台的文件
AndroidManifest.xml
上添加以下权限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />