如何在.NET MAUI中检查wifi状态?

问题描述 投票:0回答:1

我正在寻找一种方法来检查手机的Wi-Fi是否在Dote NET MAUI中打开或关闭。互联网连接状态并不重要,但我只需要检查 Wi-Fi 状态。

我使用“WifiManager”并遇到了指向空值的警告,当然程序在运行和模拟时总是遇到空值。

我把测试的方法写在下面:

  1. 我创建了一个名为 IWifiService
  2. 的接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WifiTest9
{
    public interface IWifiService
    {
        bool IsWifiEnabled();
    }
}
  1. 然后我在Platforms/Android中创建了一个专门针对android的类
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;
  1. 最后我在 MainPage.xaml.cs 中使用了它们
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; }

链接: WifiManager.IsWifiEnabled 属性

android maui wifi wifimanager
1个回答
0
投票

另外,我在微软文档中找到了另一种方法,但是我 不知道怎么用

您可以通过调用平台代码来实现这一点。

基于官方示例代码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"  />
© www.soinside.com 2019 - 2024. All rights reserved.