当前位置: 首页 > 知识库问答 >
问题:

熔合位置Api setSmallestDisplacement忽略/不工作

戴瑞
2023-03-14

我正在尝试创建一个服务,该服务将在每x秒和y距离后接收位置更新。我在x秒后收到更新,但在y距离后从未收到更新。我已经用不同的值多次测试过它,似乎setSmallestDisplace根本不起作用。关于这个问题有各种各样的帖子,但没有任何解决方案。如果有人能帮助我,甚至给我指出一个不同的方向,我将不胜感激。

我的服务

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

private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private int timethresh;
private int distancethresh;
protected Location mCurrentLocation;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

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

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

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    mLocationRequest = new LocationRequest();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    //Set the desired interval for active location updates, in milliseconds.
    mLocationRequest.setInterval(60* 1000);
    //Explicitly set the fastest interval for location updates, in milliseconds.
    mLocationRequest.setFastestInterval(30* 1000);
    //Set the minimum displacement between location updates in meters
    mLocationRequest.setSmallestDisplacement(1); // float


    return super.onStartCommand(intent, flags, startId);

}

@Override
public void onConnected(Bundle bundle) {
    if (mCurrentLocation == null) {
        mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

    }
     //Requests location updates from the FusedLocationApi.      
    startLocationUpdates();

}

@Override
public void onLocationChanged(Location location) {
    mCurrentLocation = location;
    //Toast.makeText(this, ""+mCurrentLocation.getLatitude()+","+mCurrentLocation.getLongitude(), Toast.LENGTH_SHORT).show();
    System.out.println(""+mCurrentLocation.getLatitude()+","+mCurrentLocation.getLongitude());


}

@Override
public void onConnectionSuspended(int i) {
    // The connection to Google Play services was lost for some reason. We call connect() to
    // attempt to re-establish the connection.
    mGoogleApiClient.connect();
}


@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Toast.makeText(getApplicationContext(),"Location services connection failed with code " + connectionResult.getErrorCode(), Toast.LENGTH_LONG).show();

}

protected void startLocationUpdates() {
    LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, this);

}

}

共有2个答案

陆海阳
2023-03-14

试试这样的东西:

protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();

    mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);

    mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);

    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    mLocationRequest.setSmallestDisplacement(100); //100 meters
}
司空实
2023-03-14

根据这个SO问题特别是cgr的回答。

如果设备处于静止状态,则为LocationRequest设置的位移就不可能获得位置,因为位移在间隔(interval)和快速间隔(fastestInterval)内进行。正如我所猜测的,可能您已经向LocationServices传递了不同的LocationRequest对象(没有置换集)。FusedLocationApi。requestLocationUpdates()。

LocationRequest setSmallestDisplace(浮点小位移计)

设置位置更新之间的最小位移,单位为米。默认情况下,该值为0。它返回相同的对象,以便可以链接setter。

注意:来自ACCESS_COARSE_LOCATION且不ACCESS_FINE_LOCATION的应用程序的位置请求将自动限制为较慢的间隔,并且位置对象将被混淆以仅显示粗略的准确性级别。

有关详细信息,请查看此页。

 类似资料:
  • 我正在尝试使用JAXB生成一个sitemap.xml,并且忽略了location属性(我想在根元素上生成属性)。 我想生成一个xml,如下所示: 生成根元素,如下所示: 如果我更新测试以使用显式设置位置,那么它将被填充--但我想了解为什么它不能与注释一起工作。

  • 我使用pm2已经有一段时间了。最近,我需要向我的Express4项目添加一个名为“ActionLog”的自定义日志目录。因为它是一个用日志文件更新的目录,我不希望pm2在日志文件更改时重新启动应用程序,所以我希望pm2忽略查看该目录。将pm2更新到最新后,下面是我使用的命令: 我在pm2日志中得到以下错误流: https://github.com/unitech/pm2/issues/1288 h

  • 我在一个简单的锚点元素上使用了一个svg背景图像,并且需要将图形定位在元素的右侧。 我已经设置了两个相互依存关系--除了使用gif或svg图像之外,其他都是相同的。gif正确地定位在右边,但svg不正确。 gif-在iPhone上正确定位-http://codepen.io/johnholtripley/pen/yldwf svg-在iPhone上的位置不正确-http://codepen.io/

  • 问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc

  • 问题内容: 我安装了OSX ,并随同安装了: 在将其设置为1.6时显示1.6,而在将其设置为1.7时显示1.7: …但是Maven忽略了我的设置: 我发现了这个问题],这个家伙只需要在内部对其进行硬编码,但是我不希望自己进行硬编码(因此!),而且我也没有或。 它使用的版本似乎来自输出中的第一个版本,因此在短期内,通过调整1.7的文件),我能够再次获得1.6 ,但这仅意味着我获得了1.6而不是1.7

  • 我安装了带有的OSX,并且刚刚安装了以及: 正在执行其任务,始终工作,当我将其设置为1.6时显示1.6,当我将其设置为1.7时显示1.7: ...但maven忽略了我的设置: 我发现了这样一个问题,那家伙只需要在中硬编码他的,但我不希望我的!,而且我没有,也没有。 它所使用的版本似乎是从输出的第一个版本开始的,所以在短期内,通过调整1.7的文件(从这篇so文章),我可以重新获得1.6,但这仅仅意味