Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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 我如何设置一个侦听器,当我的新位置位于多边形内时通知我(有点像地理围栏)_Java_Android_Gps_Geofencing - Fatal编程技术网

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

Java 我如何设置一个侦听器,当我的新位置位于多边形内时通知我(有点像地理围栏),java,android,gps,geofencing,Java,Android,Gps,Geofencing,我正在尝试设置一个应用程序,当用户的位置在多边形中时会通知用户。 我读过关于使用polyutils库的文章,但并没有成功地实现它们 这是我试过的 @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMI

我正在尝试设置一个应用程序,当用户的位置在多边形中时会通知用户。 我读过关于使用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;
}
@覆盖
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
if(checkSelfPermission(Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和checkSelfPermission(Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
返回;
}
buildGoogleAppClient();
mMap.setMyLocationEnabled(真);
mMap.setMapType(mMap.MAP_类型_卫星);
mMap.moveCamera(CameraUpdateFactory.newLatLng(newLatLng)(48.146536,16.291830));
mMap.animateCamera(CameraUpdateFactory.zoomTo(18));
DrawPolygon();
//日志i(标签“onLocationChanged:location”+latLng);
}
@凌驾
未连接的公共无效(@Nullable Bundle){
mlLocationRequest=新位置请求();
mlLocationRequest.setInterval(间隔);
mLocationRequest.SetFastTestInterval(最快间隔);
mLocationRequest.setPriority(位置请求.优先级高精度);
if(checkSelfPermission(Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和checkSelfPermission(Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
返回;
}
LocationServices.FusedLocationApi.RequestLocationUpdate(mgoogleapClient,mlLocationRequest,(com.google.android.gms.location.LocationListener)this,null);
Log.d(标记“onConnected-isConnected…”:“+mgoogleapclient.isConnected()”;
}
私有void DrawPolygon(){
mPolygon1=mMap.addPolygon(新PolygonOptions()
.strokeColor(颜色为紫色)
.添加(
新车床(48.146536,16.291830),
新车床(48.146772,16.290146),
新车床(48.147397,16.290380),
新拉特林(48.147177,16.291970));
//使用多边形存储数据对象,此处用于指示任意类型。
mPolygon1.setTag(“α”);
//设置多边形的样式。
//花柱多边形(polygon1);
mPolygon2=mMap.addPolygon(新PolygonOptions()
.strokeColor(颜色\蓝色\ ARGB)
.添加(
新车床(48.146491,16.290989),
新车床(48.146265,16.290898),
新车床(48.146171,16.291819),
新车床(48.146359,16.291870));
mPolygon2.setTag(“beta”);
}
@凌驾
公共空间连接暂停(int i){
}
@凌驾
已更改位置上的公共无效(位置){
mLastLocation=位置;
LatLng LatLng=新LatLng(location.getLatitude(),location.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
对于(多边形多边形多边形:getPolygons()){
if(PolyUtil.containsLocation(latLng,polgon.getPoints(),true)){
//找到它打开一个信息窗口
Log.i(Log_标签,“您当前所在的:“+polgon”);
返回;
}
}
}
公共集合getPolygons(){
集合多边形=新的ArrayList();
((ArrayList)多边形)。添加(1,mPolygon1);
((ArrayList)多边形)。添加(2,mPolygon2);
返回多边形;
}
当我运行应用程序时,IDE抛出一个错误,指向lines indexoutofBounds异常,应用程序不运行