Как проверить состояние Wi-Fi в .NET MAUI?

Ищу способ проверить включен или выключен Wi-Fi телефона в Dote NET MAUI. Статус подключения к Интернету не важен, мне просто нужно проверить статус Wi-Fi.

Я использовал «WifiManager» и столкнулся с предупреждениями, указывающими на нулевые значения, и, конечно же, программа всегда встречала нулевое значение при запуске и моделировании.

Я пишу проверенный метод ниже:

  1. Я создал интерфейс под названием IWifiService.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WifiTest9
{
    public interface IWifiService
    {
        bool IsWifiEnabled();
    }
}
  1. Затем я создал класс специально для 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";
    }
}

Кроме того, я нашел в документации Microsoft еще один способ, но не знаю, как им воспользоваться, и ссылку с кодом помещу ниже.

public virtual bool IsWifiEnabled { [Android.Runtime.Register("isWifiEnabled", "()Z", "GetIsWifiEnabledHandler")] get; }

Связь: Свойство WifiManager.IsWifiEnabled

Почему вы пишете службы зависимостей в приложении MAUI?

FreakyAli 14.06.2024 17:25

Потому что я создал класс специально для платформы Android, и определение системы зависимостей может сделать код более понятным.

MohammadHossein Parvaneh 14.06.2024 18:16

Я имею в виду, что вам не нужна служба зависимостей, вы можете использовать внутреннюю инъекцию зависимостей в Мауи.

FreakyAli 16.06.2024 00:23

Ты прав. но я не обратил внимания на Access_Wifi_State в android.manifest.xaml и мог проверить комфортное состояние Wi-Fi (без какой-либо инъекции).

MohammadHossein Parvaneh 16.06.2024 19:35
0
4
175
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Кроме того, в документации Microsoft я нашел другой способ, но мне не знаю, как его использовать

Этого можно добиться, вызывая код платформы.

Основываясь на официальном образце кода InvokePlatformCodeDemos, я реализовал эту функцию на своей стороне, вы можете обратиться к следующему коду:

1.создайте класс WifiStateService.cs в папке Services.ConditionalCompilation

using Android.Net.Wifi;

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

Примечание:

Не забудьте добавить следующее разрешение к файлу AndroidManifest.xml на платформе Android.

 <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE"  />

большое спасибо, вы совершенно правы. К сожалению, я не видел вашего ответа раньше и исправил его с небольшой разницей несколько минут назад. А если бы я проверил сообщение раньше, проблема была бы решена быстрее.

MohammadHossein Parvaneh 16.06.2024 19:46

Упрощенный ответ

#if ANDROID
using Android.Content;
using Android.Net.Wifi;
#endif

        private void Button_Clicked(object sender, EventArgs e)
        {
#if ANDROID
            var wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);
            if (wifiManager.IsWifiEnabled)
            {
                WifiStateLabel.Text = "Wifi State: ON";
            }
            else
            {
                WifiStateLabel.Text = "Wifi State: OFF";
            }
#endif

благодаря Джесси Чжан – MSFT и ЧумовойАли

Другие вопросы по теме