android - Xamarin Forms 使用 CrossGeolocator 获取前台服务位置更新
问题描述
我正在使用 CrossGeolocator 插件订阅 Xamarin Forms 应用程序中的位置更新,适用于 Android(对于 iOS,即使应用程序在后台,位置更新也会继续)。
我实现了一个前台服务,这样即使应用程序进入后台,我也可以继续获取位置。
据我了解,如果我在前台服务中收听它们,我应该能够获得位置更新。
但是,当应用程序进入后台时,我没有获得位置更新。
我的服务数据源的 StartCommand:
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
Notification notif = DependencyService.Get<INotification>().ReturnNotif();
StartForeground(ServiceRunningNotifID, notif);
CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(10), 0, true, new Plugin.Geolocator.Abstractions.ListenerSettings
{
ActivityType = ActivityType.Other,
PauseLocationUpdatesAutomatically = false,
AllowBackgroundUpdates = true,
DeferLocationUpdates = false,
ListenForSignificantChanges = false,
});
CrossGeolocator.Current.PositionChanged += PositionChanged;
CrossGeolocator.Current.PositionError += PositionError;
return StartCommandResult.Sticky;
}
和事件:
private void PositionError(object sender, PositionErrorEventArgs e)
{
Console.WriteLine($"{e.Error}");
}
private void PositionChanged(object sender, PositionEventArgs e)
{
Console.WriteLine($"{e.Position.Latitude}, {e.Position.Longitude}");
}
这些事件仅在应用程序处于活动状态时触发。服务启动,设备显示服务正在运行的通知标志。
我已分配所需的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
任何人都可以对实施情况有所了解吗?如果需要,我可以提供额外的代码。
解决方案
我通过添加以下内容找到了解决方案:
ForegroundServiceType = ForegroundService.TypeDataSync | ForegroundService.TypeLocation
作为前台服务中的服务属性
[Service(ForegroundServiceType = ForegroundService.TypeDataSync | ForegroundService.TypeLocation)]
public class LocationForegroundService : Service
{
...
}
推荐阅读
- json - python中有没有办法将值添加到键中而不是替换json文件中的现有值?
- excel - Excel 用冒号格式化字符串
- elasticsearch - 在 Elasticsearch 中,如何按嵌套字段的属性对检索到的结果进行排序
- c++ - C++ 求职面试问题变得更难了,如何解决?
- java - 在 Java 中,ArrayList 始终读取为 .size() 0 到 while 循环,即使它是在创建时实现的
- java - 关于客户端锁定(同步块)的 CoreJava 第 11 版线程问题
- ruby-on-rails - 此代码中引用的模型关联行的 3.1 版本在哪里
- jquery - 滚动停止时,浮动 div “捕捉”到最近的 tr
- javascript - 如果使用具有相同值的分组列表,如何获得唯一的活动元素
- node.js - 提高 Redis Lua 脚本性能