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");
};
我是 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");
};