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 参考链接
由于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,也就是说它会认为并未断网。小于怀疑是由于其模拟器所在系统与真机在进行通讯,其也就是认为网络未中断。