android总共有多少过api,除了Android API之外,是否还有其他用于计算Geofence违规的API...

小编典典

您可以自己实现它,而无需使用任何框架,这非常容易…

我假设您要检查您是否在圆形地理围栏内。

为此,只需计算圆心与您的位置之间的距离(经度,纬度)。如果距离小于圆半径,则说明您在地理围栏内,否则就在地理围栏外。

像这样:

boolean checkInside(Circle circle, double longitude, double latitude) {

return calculateDistance(

circle.getLongitude(), circle.getLatitude(), longitude, latitude

) < circle.getRadius();}

要计算两点之间的距离,可以使用以下方法:

double calculateDistance(

double longitude1, double latitude1,

double longitude2, double latitude2) {

double c =

Math.sin(Math.toRadians(latitude1)) *

Math.sin(Math.toRadians(latitude2)) +

Math.cos(Math.toRadians(latitude1)) *

Math.cos(Math.toRadians(latitude2)) *

Math.cos(Math.toRadians(longitude2) -

Math.toRadians(longitude1));

c = c > 0 ? Math.min(1, c) : Math.max(-1, c);

return 3959 * 1.609 * 1000 * Math.acos(c);

}

该公式称为Haversine公式。它考虑了地球的弯曲。结果以米为单位。

我也在博客上描述了它:

用于检查地理栅栏多边形:http ://stefanbangels.blogspot.be/2013/10/geo-fencing-sample-code.html

2020-11-19

`java.lang.IllegalArgumentException: Geofence 22 not registered` 是一个运行时异常,通常在Java应用中与Google Play Services的Geofencing API相关。这个错误表明系统在尝试管理一个地理围栏(Geofence)时遇到了问题,具体来说,它指的是编号为22的地理围栏没有被正确注册。 Geofencing APIAndroid用于实现基于位置的服务,比如当设备进入或离开特定区域时触发某些操作。当你试图调用与这个未注册的地理围栏相关的方法,如`addGeofence()` 或 `removeGeofence()`,系统会抛出这个异常,因为系统找不到与该ID关联的地理围栏配置。 可能的原因包括: 1. 你可能忘记在注册地理围栏之前调用了`addGeofence()`,或者在添加后没有正确保存或者重新注册该围栏。 2. 该地理围栏可能已经从后台清理,例如用户手动从Google地图服务中删除了它,或者系统因资源限制自动移除了。 3. 地理围栏的注册可能存在延迟,特别是如果你在应用程序启动时立即尝试添加围栏,而那时Google服务可能还未完全初始化。 要解决这个问题,你需要检查以下步骤: - 确保在调用`addGeofence()`之前已经正确初始化了Google Play Services。 - 重试添加地理围栏,确保在添加后调用`registerGeofence()`以注册围栏。 - 检查是否正确处理了围栏的生命周期管理,比如在设备进入后台或者重启后重新添加。 - 如果是应用导致的围栏移除,确保你的代码正确地删除围栏,并且在删除后正确更新状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值