Xamarin.forms Xamarin形态-在土工围栏中时不触发发光的土工围栏
我已经创建了一个xamarin表单应用程序,其中一个要求如下:用户应该能够按下按钮并创建地理围栏。创建地理围栏时,应用程序会不断检查用户是否在地理围栏中。这是真的,移动应用程序应该显示一个通知sayinf:您已进入geofence 我使用Shiny实现基于本教程的功能:“” 但问题是它什么也没做。我已经将geofence设置在离我家50米的地方,检查半径设置为200米,所以当我构建应用程序时,几秒钟/分钟我应该会收到一个不适,对吗?还是我需要先走出栅栏,然后再进去?如何解决此问题 我的代码:Xamarin.forms Xamarin形态-在土工围栏中时不触发发光的土工围栏,xamarin.forms,shiny,notifications,geolocation,geofencing,Xamarin.forms,Shiny,Notifications,Geolocation,Geofencing,我已经创建了一个xamarin表单应用程序,其中一个要求如下:用户应该能够按下按钮并创建地理围栏。创建地理围栏时,应用程序会不断检查用户是否在地理围栏中。这是真的,移动应用程序应该显示一个通知sayinf:您已进入geofence 我使用Shiny实现基于本教程的功能:“” 但问题是它什么也没做。我已经将geofence设置在离我家50米的地方,检查半径设置为200米,所以当我构建应用程序时,几秒钟/分钟我应该会收到一个不适,对吗?还是我需要先走出栅栏,然后再进去?如何解决此问题 我的代码:
// shiny doesn't usually manage your viewmodels, so we'll do this for now
var geofences = ShinyHost.Resolve<IGeofenceManager>();
var notifications = ShinyHost.Resolve<INotificationManager>();
Register = new Command(async () =>
{
// this is really only required on iOS, but do it to be safe
var access = await notifications.RequestAccess();
if (access == AccessState.Available)
{
await geofences.StartMonitoring(new GeofenceRegion(
"CN Tower - Toronto, Canada",
new Position(52.079779, 4.337133),
Distance.FromMeters(200)
)
{
NotifyOnEntry = true,
NotifyOnExit = true,
SingleUse = false
});
}
});
public class GeofenceDelegate : IGeofenceDelegate
{
private readonly INotificationManager _notifications;
public GeofenceDelegate(INotificationManager notifications)
{
_notifications = notifications;
}
public async Task OnStatusChanged(GeofenceState newStatus, GeofenceRegion region)
{
if (newStatus == GeofenceState.Entered)
{
await GeofenceEntered(region);
}
else if (newStatus == GeofenceState.Exited)
{
await GeofenceLeft(region);
}
}
}
//shiny通常不管理您的viewmodels,所以我们现在就来做
var geofenses=ShinyHost.Resolve();
var notifications=ShinyHost.Resolve();
寄存器=新命令(异步()=>
{
//这实际上只在iOS上需要,但这样做是为了安全
var access=等待通知。RequestAccess();
if(access==AccessState.Available)
{
等待地理围栏。开始监控(新地理围栏区域)(
“加拿大多伦多CN塔”,
新职位(52.079779,4.337133),
距离。米(200)
)
{
NotifyOnEntry=true,
NotifyOnExit=true,
单次使用=错误
});
}
});
公共类GeofenceDelegate:IGeofenceDelegate
{
私有只读INotificationManager\u通知;
公共GeofenceDelegate(INotificationManager通知)
{
_通知=通知;
}
公共异步任务OnStatusChanged(GeofenceState newStatus,GeofenceRegion)
{
if(newStatus==geofenstate.Entered)
{
等待进入(区域);
}
else if(newStatus==geofenstate.Exited)
{
等待左(区域);
}
}
}
我有与教程完全相同的代码,如果我调试了某个按钮,那么当我单击该按钮时就会创建地理围栏。所以在我看来一切都很好。我也有类似的问题,只是假设当你开始进入围栏时,它不会识别你进入/退出,因为你已经在围栏内了 我必须走出/进入创建的围栏才能触发“OnStatusChanged”方法 需要注意的是,除非我的应用程序激活了手机的GPS系统(例如,定期重新请求当前位置),否则它不会进入该方法,但我不确定这是否是由我的旧ass手机(运行Android6.1)引起的,或者它是否以这种方式工作 还要注意的是,我没有使用shinny.notifications,只是在方法运行时(出于测试目的)显示了一个弹出窗口,如下所示:
public async Task OnStatusChanged(GeofenceState newStatus, GeofenceRegion region)
{
await Application.Current.MainPage.DisplayAlert(newStatus.ToString(), $"{region.Identifier}", "Ok");
}
希望这有帮助;) 非常好,最后我选择不再使用闪亮。他们的文档不是最新的,样品也不是很好..是的。。。您是否使用了其他框架,或者您自己完成了所有工作?我使用了geolocator插件。我不知道用户的位置,并将其与另一个位置进行比较,当该值低于treshhold时,用户处于地理围栏中。我不知道这是否是一个真正好的解决方案,因为电池消耗。。