xamarin - 检测连接更改 Xamarin 表单
问题描述
目前我正在使用Xamarin.Essentials.Connectivity来检查我的互联网连接。我正在使用下面的代码在进行交易之前检查是否有互联网。如何检查我的表单中的 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);
}
}
解决方案
你能告诉我如何以及在哪里放这个吗?为了在全球范围内使用它
这是通过 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");
}
}
推荐阅读
- ios - 自定义 UITableViewCell 无法正确显示
- swift - 捕获应用程序不活动一段时间
- r - 从 R 中的网站提取表格 - 读入 R 时从 HTML 中省略该表格
- css - CSS Flexbox:将最后第 n 个项目对齐到末尾
- flutter - BlocListener 不响应状态变化
- python - 数据框 - 将多个与有时不同的索引相加
- python - 当用户在 Python 中按下 Tab 时,如何获取用户输入?
- r - 如何引用列表内数据框中的列?
- node.js - 每次部署到生产是否都必须删除节点模块并运行 npm install?
- linux - 如何在 bash 中获取递归别名?