检测连接更改Xamarin表单

检测连接更改Xamarin表单,xamarin,xamarin.forms,xamarin.essentials,Xamarin,Xamarin.forms,Xamarin.essentials,目前我正在使用Xamarin.Essentials.Connectivity检查我的internet连接。在进行交易之前,我使用下面的代码检查是否存在互联网。如何检查我的表单中的internet连接是否有变化?例如,我有两(2)个表单登录表单和主菜单,无论我当前使用的是哪种表单,当我打开设备的Wifi时,它将显示一个警报,提示我没有互联网连接。我怎样才能做到这一点 var current = Connectivity.NetworkAccess; //Check if there is an

目前我正在使用Xamarin.Essentials.Connectivity检查我的internet连接。在进行交易之前,我使用下面的代码检查是否存在互联网。如何检查我的表单中的internet连接是否有变化?例如,我有两(2)个表单登录表单主菜单,无论我当前使用的是哪种表单,当我打开设备的Wifi时,它将显示一个警报,提示我没有互联网连接。我怎样才能做到这一点

var current = Connectivity.NetworkAccess;

//Check if there is an internet connection
if (current == NetworkAccess.Internet)
{
   DisplayAlert("Ok", "Connected", "Ok");
}
else {
   DisplayAlert("Error", Connected, "Ok");
}
我试图使用Xamarin.Essentials.Connectivity文档中的这段代码,但我不知道如何使用这段代码以及将其放在何处

public class ConnectivityTest
{
   public ConnectivityTest()
   {
       // Register for connectivity changes, be sure to unsubscribe when finished
       Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
   }

   void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs  e)
   {
       var access = e.NetworkAccess;
       var profiles = e.Profiles;
   }
}
我的同步代码

public async void FirstSyncUser(string host, string database, string contact)
    {
        try
        {
            var db = DependencyService.Get<ISQLiteDB>();
            var conn = db.GetConnection();

            var sql = "SELECT * FROM tblUser WHERE ContactID = '" + contact + "'";
            var getUser = conn.QueryAsync<UserTable>(sql);
            var resultCount = getUser.Result.Count;

            //Check if the user has been sync
            if (resultCount < 1)
            {
                try
                {
                    syncStatus.Text = "Syncing User Data";

                    var link = Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=8qApc8";
                    string contentType = "application/json";
                    JObject json = new JObject
                    {
                        { "ContactID", contact }
                    };

                    HttpClient client = new HttpClient();
                    var response = await client.PostAsync(link, new StringContent(json.ToString(), Encoding.UTF8, contentType));

                    if (response.IsSuccessStatusCode)
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        if(content != "")
                        {
                            var userresult = JsonConvert.DeserializeObject<List<UserData>>(content);
                            for (int i = 0; i < userresult.Count; i++)
                            {
                                syncStatus.Text = "Syncing User Data " + (i + 1) + " out of " + userresult.Count;

                                var item = userresult[i];
                                var contactID = item.ContactID;
                                var userID = item.UserID;
                                var userPassword = item.UserPassword;
                                var userType = item.UserType;
                                var userStatus = item.UserStatus;
                                var lastSync = Convert.ToDateTime(item.LastSync);
                                var serverUpdate = Convert.ToDateTime(item.ServerUpdate);
                                var mobileUpdate = Convert.ToDateTime(item.MobileUpdate);

                                var user = new UserTable
                                {
                                    ContactID = Convert.ToInt32(contactID),
                                    UserID = userID,
                                    UserPassword = userPassword,
                                    UserType = userType,
                                    UserStatus = userStatus,
                                    LastSync = lastSync,
                                    ServerUpdate = serverUpdate,
                                    MobileUpdate = mobileUpdate
                                };

                                await conn.InsertAsync(user);
                            }
                        }
                        else
                        {
                            //Proceed to next function
                            FirstSyncContacts(host, database, contact);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("Syncing User Error " + ex.Message);
                }

                //Proceed to next function
                FirstSyncContacts(host, database, contact);
            }
            //If not get the user
            else
            {
                SyncUser(host, database, contact);
            }
        }
        catch (Exception ex)
        {
            Console.Write("Syncing User Error " + ex.Message);
        }
    }
public async void FirstSyncUser(字符串主机、字符串数据库、字符串联系人)
{
尝试
{
var db=DependencyService.Get();
var conn=db.GetConnection();
var sql=“从tblUser中选择*,其中ContactID='”+contact+”;
var getUser=conn.querySync(sql);
var resultCount=getUser.Result.Count;
//检查用户是否已同步
如果(结果计数<1)
{
尝试
{
syncStatus.Text=“正在同步用户数据”;
var link=Constants.requestUrl+“Host=“+Host+”&Database=“+Database+”&Contact=“+Contact+”&Request=8qApc8”;
字符串contentType=“application/json”;
JObject json=新的JObject
{
{“联系人ID”,联系人}
};
HttpClient=新的HttpClient();
var response=wait client.PostAsync(链接,新的StringContent(json.ToString(),Encoding.UTF8,contentType));
if(响应。IsSuccessStatusCode)
{
var content=await response.content.ReadAsStringAsync();
如果(内容!=“”)
{
var userresult=JsonConvert.DeserializeObject(内容);
for(int i=0;i
你能告诉我怎么把这个放在哪里吗?为了在全球范围内使用它

下面是一个通过OnStart、OnSleep和OnResume覆盖在表单应用程序级别使用Essentials.Connectivity的示例

public partial class App : Application
{
    ~~~~

    protected override void OnStart()
    {
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
    }

    protected override void OnSleep()
    {
        Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
    }

    protected override void OnResume()
    {
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
    }

    void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
    {
        Page page;
        if (MainPage is NavigationPage)
        {
            page = ((NavigationPage)MainPage).CurrentPage;
        }
        else
        {
            page = MainPage;
        }
        page.DisplayAlert("Status", e.NetworkAccess.ToString(), "OK");
    }

}

它全局使用它,在应用程序(应用程序)级别设置处理程序。否则,在页面生命周期事件中添加/删除处理程序(为了避免重复,请使用这些事件定义一个页面子类,然后将该子类用作所有其他页面的子类。)@SushiHangover你能给我演示一下吗?@SushiHangover你能给我演示一下如何以及在何处放置这个吗?为了使用它,全局感谢您回答最后一个问题,如果我想执行一个公共异步void FirstSyncUser(字符串主机、字符串数据库、字符串联系人),而不是显示警报,该怎么办检查internet更改以便同步两个数据库的目的请参见上面更新的问题如何执行该操作而不是显示警报?@lootverge只需调用
FirstSyncUser
vs调用DisplayAlert,传递适当的参数我在哪里调用FirstSyncUser?iniside void Connectivity\u ConnectivityChanged(对象发送方,ConnectivityChangedEventArgs e)?@lootverge是,假设您要检查
e.NetworkAccess
首先等于Internet..
if(e.NetworkAccess==NetworkAccess.Internet){…}