我如何设置一个侦听器,当我的新位置位于多边形内时会通知我(类似于地理围栏)

时间:2019-07-03 10:58:14

标签: java android gps geofencing

正在尝试建立一个应用,当用户的位置在多边形中时会通知用户。 我已经阅读了有关使用polyutils库的信息,但并未成功实现它们。

这是我尝试过的

    @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;


    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    buildGoogleApiClient();
    mMap.setMyLocationEnabled(true);

    mMap.setMapType(mMap.MAP_TYPE_SATELLITE);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(48.146536, 16.291830)));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(18));
    DrawPolygon();

    // Log.i(TAG, "onLocationChanged: location" + latLng);
}


@Override
public void onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        return;
    }
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (com.google.android.gms.location.LocationListener) this, null);

    Log.d(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected());

}
private void DrawPolygon() {
    mPolygon1 = mMap.addPolygon(new PolygonOptions()
            .strokeColor(COLOR_PURPLE_ARGB)
            .add(
                    new LatLng(48.146536, 16.291830),
                    new LatLng(48.146772, 16.290146),
                    new LatLng(48.147397, 16.290380),
                    new LatLng(48.147177, 16.291970)));
    // Store a data object with the polygon, used here to indicate an arbitrary type.
    mPolygon1.setTag("alpha");
    // Style the polygon.
   // stylePolygon(polygon1);

    mPolygon2 = mMap.addPolygon(new PolygonOptions()
            .strokeColor(COLOR_BLUE_ARGB)
            .add(
                    new LatLng(48.146491, 16.290989),
                    new LatLng(48.146265, 16.290898),
                    new LatLng(48.146171, 16.291819),
                    new LatLng(48.146359, 16.291870)));
    mPolygon2.setTag("beta");

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onLocationChanged(Location location) {
    mLastLocation = location;

    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    for (Polygon polgon : getPolygons()) {
        if (PolyUtil.containsLocation(latLng, polgon.getPoints(), true)) {
            // found it open a info window
            Log.i(LOG_TAG, "Your Currently in : " + polgon);
            return;
        }
    }
}
public Collection<Polygon> getPolygons() {
    Collection<Polygon> polygons = new ArrayList<Polygon>();
    ((ArrayList<Polygon>) polygons).add(1, mPolygon1);
    ((ArrayList<Polygon>) polygons).add(2, mPolygon2);
    return polygons;
}

当我运行应用程序时,IDE会抛出错误,指出 indexoutofBounds异常行,并且该应用程序无法运行。

0 个答案:

没有答案