【问题标题】:Internet Connectivity Listener in Xamarin.FormsXamarin.Forms 中的 Internet 连接侦听器
【发布时间】:2016-11-07 06:11:31
【问题描述】:

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

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

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

【问题讨论】:

  • 我是专门针对每个平台做的,如果您有兴趣我可以提供答案,否则我不知道它是否存在于 XF..
  • 当然。我可以使用依赖服务。请给我一个平台特定的解决方案。

标签: c#-4.0 xamarin.forms internet-connection


【解决方案1】:

使用插件 CrossConnectivity,你需要通过事件 ConnectivityChanged 来监听变化,所以在你的页面,或者你的 App 类中,添加这段代码来编写一个事件处理器:

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

【讨论】:

  • 连接发生变化时,此事件是否会针对每个事件调用?
  • 我应该在哪里声明此事件,以便在更改连接时触发它?
  • 这取决于你的需要,你可以在你的页面的 OnAppearing 方法中调用它,如果你需要在你的页面可见的时候监听变化。
  • 是的。谢谢你。让我检查一下。
  • 在 iOS 上,断开连接会显示“IsConnected: true”
【解决方案2】:

我有 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;

                }
            }
        }
    }

然后在您的活动中注册您的广播接收器(例如在 MainActivity 中)

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

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

CrossConnectivity.Current.IsReachable("localhost");

如果您下载软件包,这也有效。我还没有彻底测试过

【讨论】:

  • 如何在 PCL 中查看连接状态?
  • 我用这个 CrossConnectivity.Current.IsReachable("localhost");它返回一个布尔值
猜你喜欢
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2023-03-12
相关资源
最近更新 更多