loot verge
loot verge

Reputation: 449

Detecting Connectivity Changes Xamarin Forms

Currently I am using Xamarin.Essentials.Connectivity to check my internet connection. I am using the code below to check if there is an internet before doing a transaction. How can I check if there is a change in my internet connection across my forms? For example, I have two(2) forms Login Form and Main Menu regardless what form I am currently in when I turn of my the Wifi of my device it will display an alert prompting me that there is no internet connection. How can I achieve that?

var current = Connectivity.NetworkAccess;

//Check if there is an internet connection
if (current == NetworkAccess.Internet)
{
   DisplayAlert("Ok", "Connected", "Ok");
}
else {
   DisplayAlert("Error", Connected, "Ok");
}

I tried to use this code from the documentation of Xamarin.Essentials.Connectivity but I dont know how to use this and where to put this

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;
   }
}

My code for syncing

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);
        }
    }

Upvotes: 1

Views: 2836

Answers (1)

SushiHangover
SushiHangover

Reputation: 74194

can you show me how and where do I put this? In order to use it globally

Here is an example of using Essentials.Connectivity at the Forms' Application level via the OnStart, OnSleep and OnResume overrides

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

}

Upvotes: 2

Related Questions