如何使地理围栏准确?

时间:2015-08-02 03:27:26

标签: android geolocation location android-location android-geofence

我在地理围栏的准确性方面存在问题,因为用户的位置主要由移动网络完全决定。

我的应用程序在选定位置使用地理围栏,当用户进入这些位置时会执行某些操作...我确认我的应用程序确实有效,因为当我打开谷歌地图时,位置的准确性会增加,然后会触发我的地理围栏。 / p>

我目前的解决方案是使用位置管理器和gps提供程序,每隔一分钟获取一次位置,但它似乎会影响电池寿命,并且会在一段时间后停止。

我的问题是:有没有办法让地理围栏精确到60米半径?或者有没有办法让用户进行精确的位置更新?

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以通过以下主题更好地了解准确性:

How to make Geo Fencing alert more accurate in Android

创建地理围栏后,您可以开始ping GPS,直到您获得ENTER转换。我试过这种方式,我的准确度更高。

简单的ping服务:

public class GPSService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {

GoogleApiClient mGoogleApiClient;
LocationRequest locationRequest;

public GPSService() {
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public void onCreate() {
    super.onCreate();


    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    mGoogleApiClient.connect();


}

@Override
public void onLocationChanged(Location location) {


    Utility.ReadAndWriteData(this, Utility.readFileName(this), "Still Geofence is not triggered!!!");

}

@Override
public void onConnected(Bundle bundle) {

    locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setFastestInterval(1000);
    locationRequest.setInterval(2000);
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this);

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onDestroy() {
    super.onDestroy();

    if(mGoogleApiClient.isConnected()) {

        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);

    }
}