Reputation: 449
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
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