Android 如何使地理围栏准确?

Android 如何使地理围栏准确?,android,geolocation,location,android-location,android-geofence,Android,Geolocation,Location,Android Location,Android Geofence,我在地理围栏的准确性方面遇到了一个问题,因为用户的位置主要由移动网络决定,而移动网络非常糟糕 我的应用程序在选定的地点周围使用地理围栏,当用户进入这些地点时,将执行一些操作…我确认我的应用程序确实有效,因为当我打开谷歌地图时,位置的准确性会提高,然后我的地理围栏会被触发 我目前的解决方案是使用gps提供商的位置管理器,它每一分钟获取一次位置信息,但它似乎会影响电池寿命,过一段时间就会停止 我的问题是:有没有一种方法可以使地球围栏精确到60米半径?或者是否有任何方法可以获得用户的精确位置更新 提前

我在地理围栏的准确性方面遇到了一个问题,因为用户的位置主要由移动网络决定,而移动网络非常糟糕

我的应用程序在选定的地点周围使用地理围栏,当用户进入这些地点时,将执行一些操作…我确认我的应用程序确实有效,因为当我打开谷歌地图时,位置的准确性会提高,然后我的地理围栏会被触发

我目前的解决方案是使用gps提供商的位置管理器,它每一分钟获取一次位置信息,但它似乎会影响电池寿命,过一段时间就会停止

我的问题是:有没有一种方法可以使地球围栏精确到60米半径?或者是否有任何方法可以获得用户的精确位置更新


提前感谢

您将通过以下线索更好地了解准确性:

创建地理围栏后,您可以开始ping您的GPS,直到进入过渡。我试过这种方法,我得到了更好的准确性

向ping GPS提供简单的服务:

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);

    }
} 

您可以同时使用GSM和GPS数据来提高您的位置检测性能。这里可以找到一个通过GPS检测位置的好例子,谢谢,但我的应用程序要求立即触发地理围栏。我不需要每隔30分钟左右获取一次位置,有没有办法使GeoFence精确到60个月。这个问题是错误的,因为它只取决于位置提供者的精度。智能手机中的Gps芯片没有那么好。但是60米是不好的。很多手机都可以使用15米或更少的距离。我的应用程序总是在后台运行,所以我认为轮询gps总是会影响电池寿命,正如我前面所述……我需要知道如何准确地ping gps,我应该使用location manager吗?我应该设置什么样的最小时间和最小距离?@Dev:实际上,你只需要ping GPS,直到你当前的地理围栏被ENTER transition触发。因此,当您在创建地理围栏后编写代码来创建它时,您将开始ping您的GPS。一旦你将进入过渡,你必须停止ping它。就这样。正如您所提到的,在土工围栏的情况下,60米的半径非常小,因此如果您可以增加,使其至少达到500米,那么您将获得更好的结果,因为在较小的半径内,它无法跟踪transiiton@Dev:在上面添加了简单的服务调用如果用户输入了另一个地理围栏怎么办?在这种情况下,应用程序将无法工作,因为我在用户位置附近注册了20个geofences Hello@Jai,我今天要试试:)