【发布时间】:2021-03-09 03:53:11
【问题描述】:
在我的项目中,我使用依赖服务来打开设备的位置。打开位置后,我需要修改 UI。我在 onAppearing() 上添加了 GPS 状态检查代码。 onAppearing 方法是初始触发并检查 GPS 状态。如果 GPS 状态关闭,则 UI 上将显示位置共享按钮。如果我们点击共享位置按钮,我会将用户重定向到设备位置设置页面。当用户在该位置后返回应用程序时,此时 onAppearing() 没有触发。
我的代码
protected override void OnAppearing()
{
base.OnAppearing();
ShareLocation();
}
public async void ShareLocation()
{
var status = await Permissions.RequestAsync<Permissions.LocationAlways>();
if (status == PermissionStatus.Granted)
{
bool gpsStatus = DependencyService.Get<ILocSettings>().isGpsAvailable();
if (!gpsStatus)
{
location_sharing.IsVisible = true;
location_sharing_on.IsVisible = false;
}
else
{
location_sharing_on.IsVisible = true;
location_sharing.IsVisible = false;
}
}
}
按钮的点击事件
var myAction = await DisplayAlert("Location", "Please turn on GPS to get your current location for emergency response.", "TURN ON", "CANCEL");
if (myAction)
{
DependencyService.Get<ILocSettings>().OpenSettings();
}
依赖服务:
namespace projectName.Renderer
{
public interface ILocSettings
{
void OpenSettings();
bool isGpsAvailable();
}
}
[assembly: Dependency(typeof(LocationShare))]
namespace projectName.Droid.Services
{
public class LocationShare : ILocSettings
{
public bool isGpsAvailable()
{
bool value = false;
Android.Locations.LocationManager manager = (Android.Locations.LocationManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.LocationService);
if (!manager.IsProviderEnabled(Android.Locations.LocationManager.GpsProvider))
{
//gps disable
value = false;
}
else
{
//Gps enable
value = true;
}
return value;
}
public void OpenSettings()
{
Intent intent = new Android.Content.Intent(Android.Provider.Settings.ActionLocationSourceSettings);
intent.AddFlags(ActivityFlags.NewTask);
Android.App.Application.Context.StartActivity(intent);
}
}
}
通常,onAppearing() 总是会在加载页面时执行。但我不知道这个页面上的问题是什么。在位置设置后加载页面时,onAppearing 不会触发。我附上了一个示例项目here。
【问题讨论】:
-
示例项目并不复杂。如果您下载项目并检查问题,那就是这样。
-
我下载了,很好用
-
@ShubhamTyagi 我检查了样本。她的 UI 上有 2 个按钮。一个是“位置共享”按钮,另一个是“开启”按钮。从设置中打开位置后,她需要隐藏位置共享按钮并显示“打开”按钮。这是行不通的,因为当从设置返回应用程序时,onappearing 没有触发。
-
问题是在点击分享位置按钮时会被重定向到用户位置设置页面,然后我们又回到了需要执行的onAppearing函数并更新UI的位置。我们在 onAppearing() 上添加了 GPS 状态检查代码。 onAppearing 方法最初执行并检查 GPS 状态。但是在回到 UI 之后 onAppearing() 没有触发。 @ShubhamTyagi
标签: xamarin.forms