Xamarin.Forms 中的互联网连接侦听器

Internet Connectivity Listener in Xamarin.Forms

我是 Xamarin.Forms 的新手,我想在 iOS 和 Android 应用程序中检查互联网连接状态。事实上,使用 CrossConnectivity 插件我能够成功检查互联网连接,但它不能作为监听器工作。例如,当我打开我的应用程序但没有互联网连接时,它会显示 "No internet connection" 消息,现在如果我打开移动数据,它也会显示相同的消息。我为此使用以下代码:

string isConnected=CrossConnectivity.Current.IsConnected?"Connected":"No Connection";

我的应用无法在中间监听互联网连接状态的变化。

我有 Android 的解决方案,但我还没有开始研究 ios 部分 (有总比没有好 ;) 首先创建一个broadcastReceiver

    public class Localize: BroadcastReceiver
    {
        public static Context context;

        public Localize(Context ctx)
        {
            context = ctx;
        }
        public override void OnReceive (Context context, Intent intent)
        {
            isNetworkAvailable (context);
        }

    public void isNetworkAvailable(Context context)
    {
        Boolean state = false;
        ConnectivityManager connectivity = (ConnectivityManager) 
            context.GetSystemService(Context.ConnectivityService);
        if (connectivity != null) 
        {
            NetworkInfo[] info = connectivity.GetAllNetworkInfo();
            foreach (NetworkInfo nwork in info) 
            {
                if (nwork.GetState () == NetworkInfo.State.Connected) {

                    ConnectionDetected();//Execute your fonction here
                    break;

                }
            }
        }
    }

然后在您的activity(例如在 MainActivity 中)中使用 intent 注册您的广播接收器

IntentFilter filter = new IntentFilter(ConnectivityManager.ConnectivityAction);
receiver = new Localize(this);
RegisterReceiver(receiver, filter);

只要您的应用程序是 运行,这应该就可以工作。如果您想要一个即使您的应用程序被杀死也能运行的服务,您应该创建一个服务,然后在您的服务中注册 broadcastReceiver..

CrossConnectivity.Current.IsReachable("localhost");

如果您下载包,这也适用。我还没有彻底测试过

使用插件 CrossConnectivity,您需要通过事件 ConnectivityChanged 来监听变化,所以在您的页面或您的应用程序 class 中,添加此代码来编写事件处理程序:

CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
 {
   //your implementation
  this.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK");
 };