Обнаружение изменений подключения Xamarin Forms
В настоящее время я использую Xamarin.Essentials.Connectivity для проверки моего интернет-соединения. Я использую код ниже, чтобы проверить, есть ли Интернет, прежде чем совершать транзакцию. Как я могу проверить, есть ли изменения в моем интернет-соединении через мои формы? Например, у меня есть две (2) формы " Форма входа" и " Главное меню", независимо от того, в какой форме я нахожусь в данный момент, когда я выключаю Wi-Fi на своем устройстве, будет отображаться предупреждение о том, что у меня нет подключения к Интернету. Как я могу этого достичь?
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);
}
}
1 ответ
Можете ли вы показать мне, как и где я могу поставить это? Для того, чтобы использовать его в глобальном масштабе
Вот пример использования Essentials.Connectivity на уровне приложений форм с помощью переопределений OnStart, OnSleep и OnResume.
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");
}
}