使用智能位置库的问题

Dee*_*pak 9 android location

我正在尝试使用智能位置库来获取定期位置更新.但是当启动进程时它会触发侦听器,然后就没有进一步的更新.这是我使用的代码

public void startTracking(View v)    {
    provider = new LocationGooglePlayServicesWithFallbackProvider(this);


    Log.i("Tag","Start Tracking");
    SmartLocation smartLocation = new SmartLocation.Builder(this)
            .logging(true)
            .build();

    smartLocation.location(provider)
            .config(LocationParams.BEST_EFFORT)
            .start(this);
    smartLocation.activity().start(this);
}

public void stopTracking(View v) {
    Log.i("Tag","Stop Tracking");
    SmartLocation.with(this).location().stop();
    SmartLocation.with(this).activity().stop();

}

@Override
public void onActivityUpdated(DetectedActivity detectedActivity)
{
    Log.i("Tag","ActivityUpdate : "+detectedActivity.toString());
}

@Override
public void onLocationUpdated(Location location)
{
    Log.i("Tag","LocationUpdate : "+location.getLatitude()+","+location.getLongitude());
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的Logcat输出

 01-27 14:09:01.791 3038-3038/com.angulusits.smartlocationtest I/Tag:
 Start Tracking 

 01-27 14:09:01.879 3038-3038/com.angulusits.smartlocationtest I/Tag:
 ActivityUpdate : DetectedActivity [type=STILL, confidence=100] 

 01-27 14:09:02.017 3038-3038/com.angulusits.smartlocationtest I/Tag:
 LocationUpdate : <some-value>,<some-value>
Run Code Online (Sandbox Code Playgroud)

按下startButton,然后没有更多的值,就会给出这个.

我检查了Library for BEST_EFFORT值的代码,它是:

public static final LocationParams BEST_EFFORT = new Builder().setAccuracy(LocationAccuracy.MEDIUM).setDistance(150).setInterval(2500).build();
Run Code Online (Sandbox Code Playgroud)

因此,即使设备没有移动,我也希望每2500毫秒更新一次.如果有人能指出我正确的方向,我将不胜感激.

Kar*_*i R 16

您需要continuous()在创建位置侦听器时说出来.试试下面的代码片段,

private void startLocationListener() {

    long mLocTrackingInterval = 1000 * 5; // 5 sec
    float trackingDistance = 0;
    LocationAccuracy trackingAccuracy = LocationAccuracy.HIGH;

    LocationParams.Builder builder = new LocationParams.Builder()
            .setAccuracy(trackingAccuracy)
            .setDistance(trackingDistance)
            .setInterval(mLocTrackingInterval);

    SmartLocation.with(this)
            .location()
            .continuous()
            .config(builder.build())
            .start(new OnLocationUpdatedListener() {
                @Override
                public void onLocationUpdated(Location location) {
                    processLocation(location);
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

它的回复很晚!无论如何这会对某人有所帮助.


DRY*_*ver -3

使用 GoogleFuse Api 更好。是该 Api 的完整文档。它比使用 Github 库进行位置跟踪要好得多。

  • @IvoPereira ..可以更改智能位置库以处理位置变化的变化..尽管对于新手来说不建议使用抽象库... smartv 位置库还具有不需要的附加功能,例如活动识别等,并且使 apk 变大..我并不反对使用抽象库,但是当涉及到学习和使用我们创建的其他库的源代码时..最好先学习源代码,然后使用此类库。希望这会有所帮助 (2认同)