Xamarin.Forms Wifi 连接 及VS下接口快速抽取

 

Wifi接口与实现

通用平台下实现wifi接口

    public interface INetWorkCheck
    {
        bool IsWifiConnected();
    }

 

在android 平台实现INetWorkCheck,但此种方式是比较垃圾的。从google看到的情况,是不推荐进行如此操作的。

    public class NetWorkCheck : INetWorkCheck
    {
        public bool IsWifiConnected()
        {
            ConnectivityManager manager = ConnectivityManager.FromContext(MainActivity.AppContext);
            //以下方法获取网络状态比较低效,并且会出现资源竞争。推荐使用registerNetworkCallback
            //registerNetworkCallback 参考链接 https://docs.microsoft.com/en-us/dotnet/api/android.net.connectivitymanager.registernetworkcallback?view=xamarin-android-sdk-12
            NetworkInfo info = manager.GetNetworkInfo(ConnectivityType.Wifi);
            return info.IsConnected;
        }
    }

注意上述注释中提到的低效问题……相关的google参考链接如下。

//google  ConnectivityManager  GetNetworkInfo  参考链接 

 

 在上述代码namespace前记得添加[assembly: Dependency(typeof(XamrinScanner.Droid.WifiCheck.NetWorkCheck))],否则在通用平台用DependencyService.get<INetWorkCheck>不能正常获取。参考链接

 

 

由于wifi 检测是经常使用的,为了方便使用小子将其在程序入口的app.cs中定义了一个BoolWifi属性,以方便调用 。

        static INetWorkCheck wificheck = DependencyService.Get<INetWorkCheck>();
        //此应该放入utils中定时执行
        //private static bool boolWifi;
        public static bool BoolWifi
        {
            get => wificheck.IsWifiConnected();
        }

 

 

 快速抽取interface

下图为在VS中class快速抽取为interface的操作方法

选中你要抽取的class后右键,如下图,然后点击Quick Actions and Refactorings…

 

 

 

 调试注意事项

另外注意一下在模拟器中调试与在真机中调试,对于wifi是否连网的判断有区别,在模拟器中即使完全断网了,其也返回true,也就是说它会认为并未断网。小于怀疑是由于其模拟器所在系统与真机在进行通讯,其也就是认为网络未中断。

 

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/

posted @ 2022-01-12 16:06  盛沧海  阅读(333)  评论(0编辑  收藏  举报