仅使用 gps 定位模式的 Android 地理围栏监控
Posted
技术标签:
【中文标题】仅使用 gps 定位模式的 Android 地理围栏监控【英文标题】:Android Geofence monitoring with gps only location mode 【发布时间】:2016-10-07 06:38:45 【问题描述】:我正在创建一个使用地理围栏监控的应用程序,我已成功实现此功能,但在使用单独使用 GPS 的“仅设备”位置设置对其进行测试时遇到了问题。
我只能使用设备获取位置数据,但是当我尝试添加地理围栏以进行监控时,它总是返回状态代码 1000,即 GEOFENCE_NOT_AVAILABLE。
在我确认位置权限后调用下面的 addGeofences 代码
LocationServices.GeofencingApi.addGeofences(mApiClient, getGeofencingRequest(),
mGeofenceRequestIntent).setResultCallback(new ResultCallback<Status>()
@Override
public void onResult(@NonNull Status status)
if(!status.isSuccess())
Toast.makeText(mContext, String.format("Monitor Geofences %s", status.getStatusCode()), Toast.LENGTH_LONG).show();
else
Toast.makeText(mContext, String.format("Successfully Monitor Geofences %s", status.getStatusCode()), Toast.LENGTH_LONG).show();
);
我做错了什么还是我唯一的选择是强制用户使用高精度定位模式的省电模式?
【问题讨论】:
【参考方案1】:默认情况下,基于谷歌服务的地理围栏不请求 GPS 更新。必须“强制”这样做,之后,您的应用程序应该可以按预期再次运行。
对我来说,它的工作方式是将 LocationListener 实现到包含您的 GoogleAPIClient 初始化、GeofencingRequest 等的活动文件上的公共类
然后在同一个公共类的末尾添加
private LocationManager locationManager;
在您的 onCreate 方法结束时紧随其后
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
以及 onResume('1000' 和 '5' 分别是更新速率(以毫秒为单位)和每次更新的样本数)
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5, this);
如果您想在应用程序不在前台时节省电池电量,最后将其添加到 onPause,但根据我自己的经验,您会错过在此停机期间发生的所有通知
locationManager.removeUpdates(this);
另外,请记住导入所有新包。
如果您在更改系统设置之前能够收到通知(无论准确性如何)并且您没有更改任何其他内容,我相信这可能会解决您的问题。
我注意到您提到您在启用“仅限设备”设置的情况下获取位置数据,但可能只能通过地图等应用程序获取位置数据,例如,即使 WI-FI、蜂窝数据或两者都被禁用。您还可以发布更多代码来帮助您查明问题。
【讨论】:
顺便说一句,在阅读了右侧的链接之一后,我还意识到您所遇到的错误号与更改设置中的位置模式有关,因为所有正在进行的地理围栏都会在那时取消注册发生了,所以为了避免这个问题,你必须在你的代码中使用特定的逻辑来弥补这个变化,你可能已经知道了,但以防万一,这里是:***.com/questions/19082482以上是关于仅使用 gps 定位模式的 Android 地理围栏监控的主要内容,如果未能解决你的问题,请参考以下文章
GPS 地理定位应用程序在 Android 的 Phonegap 中不起作用