我在地理围栏的准确性方面存在问题,因为用户的位置主要由移动网络完全决定。
我的应用程序在选定位置使用地理围栏,当用户进入这些位置时会执行某些操作...我确认我的应用程序确实有效,因为当我打开谷歌地图时,位置的准确性会增加,然后会触发我的地理围栏。 / p>
我目前的解决方案是使用位置管理器和gps提供程序,每隔一分钟获取一次位置,但它似乎会影响电池寿命,并且会在一段时间后停止。
我的问题是:有没有办法让地理围栏精确到60米半径?或者有没有办法让用户进行精确的位置更新?
提前致谢
答案 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);
}
}