Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道Android设备是否靠近谷歌地图api地址_Java_Android_Google Maps_Gps_Geofencing - Fatal编程技术网

Java 如何知道Android设备是否靠近谷歌地图api地址

Java 如何知道Android设备是否靠近谷歌地图api地址,java,android,google-maps,gps,geofencing,Java,Android,Google Maps,Gps,Geofencing,我正在开发一个Android应用程序,它接收给定的地址。我只想让应用程序在设备上运行,如果用户在该地址上,或者离它更近 只有使用google maps api才能做到这一点吗?您可以获得地址,并从地址中获得纬度和经度: Geocoder coder = new Geocoder(this); List<Address> address; try { address = coder.getFromLocationName(strAddress,5); if (addr

我正在开发一个Android应用程序,它接收给定的地址。我只想让应用程序在设备上运行,如果用户在该地址上,或者离它更近


只有使用google maps api才能做到这一点吗?

您可以获得地址,并从地址中获得纬度和经度:

Geocoder coder = new Geocoder(this);
List<Address> address;

try {
    address = coder.getFromLocationName(strAddress,5);
    if (address == null) {
        return null;
    }
    Address location = address.get(0);
    location.getLatitude();
    location.getLongitude();


}
Geocoder-coder=新的地理编码器(本);

计算两个位置之间的近似距离(以米为单位)的列表,或提供您所在位置与目的地之间的距离的列表。

GMSCore locations API还具有地理编码,允许您检测设备与一个或多个地理围栏位置的接近程度。您可以使用地图获取地址的lat lng

这不会阻止你的应用程序运行。更好的解决方案是启动应用程序,然后让它进入后台。当用户穿过地理围栏时,发出通知。当用户单击通知时,调出一个活动


请参阅

当用户尝试启动应用程序但不在您所需的范围内时会发生什么情况?也许这可以帮助您:。您基本上需要比较两组坐标,并确定这两对坐标是否足够接近。@Prmths应用程序将无法打开:)@Izmaki谢谢!我一到家就看一看谢谢@Dyna!当我回家后,我会看看这个,然后我会给你反馈你的想法对我有用!但我之前搜索过一点,我发现了一个名为distanceBetween的位置类的Android方法,它做的事情与distance方法相同。如果有人遇到同样的问题,我建议你使用:OK@FelipeMosso。我会用你的链接更新我的答案,这样我们可以帮助其他开发者解决这个问题。干杯*
if (distance(mylocation.latitude, mylocation.longitude,   location.getLatitude(), location.getLongitude()) < 0.1) { // if distance < 0.1

   //   launch the activity
}else {
   finish();
}


/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometers

    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);

    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    double dist = earthRadius * c;

    return dist;
}