Ищу способ проверить включен или выключен 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";
}
}
Кроме того, я нашел в документации Microsoft еще один способ, но не знаю, как им воспользоваться, и ссылку с кодом помещу ниже.
public virtual bool IsWifiEnabled { [Android.Runtime.Register("isWifiEnabled", "()Z", "GetIsWifiEnabledHandler")] get; }
Потому что я создал класс специально для платформы Android, и определение системы зависимостей может сделать код более понятным.
Я имею в виду, что вам не нужна служба зависимостей, вы можете использовать внутреннюю инъекцию зависимостей в Мауи.
Ты прав. но я не обратил внимания на Access_Wifi_State в android.manifest.xaml и мог проверить комфортное состояние Wi-Fi (без какой-либо инъекции).
Кроме того, в документации 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" />
большое спасибо, вы совершенно правы. К сожалению, я не видел вашего ответа раньше и исправил его с небольшой разницей несколько минут назад. А если бы я проверил сообщение раньше, проблема была бы решена быстрее.
Упрощенный ответ
#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 и ЧумовойАли
Почему вы пишете службы зависимостей в приложении MAUI?