Xamarin.Forms中的Internet连接侦听器

时间:2016-11-07 06:11:32

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

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

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

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

2 个答案:

答案 0 :(得分:4)

使用插件CrossConnectivity,您需要通过事件ConnectivityChanged监听更改,因此在您的页面或App类中,添加此代码以编写事件处理程序:

- name: vlan config (vrf edition) // with interface[0]
- name: vlan config (vrf edition) // with interface[1]
- name: vrf config // with interface[0]
- name: vrf config // with interface[1]

答案 1 :(得分: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);

只要您的应用程序正在运行,这应该有效。如果您想要一个即使您的应用程序被杀死也要运行的服务,您应该创建一个服务,然后在您的服务中注册broadcastReceiver ..

CrossConnectivity.Current.IsReachable("localhost");

如果你下载包也可以。我还没有彻底测试过它