【问题标题】:Change locationEngine request interval更改位置引擎请求间隔
【发布时间】:2019-04-30 15:36:18
【问题描述】:

我在我的 App 中使用 mapbox。在为我的locationEngine 构建请求时,我经过了 20000 毫秒,但在某个时刻,我需要更改该间隔并每隔 5000 毫秒通知一次位置更改。

有没有办法改变这个间隔,或者为我的locationEngine 建立另一个请求?

这是我尝试过的:

这是我初始化定位引擎的地方

   @SuppressLint("MissingPermission")
    private void initializeLocationEngine(int interval) {
        locationEngine =LocationEngineProvider.getBestLocationEngine(parentActivity);
        LocationEngineRequest request = buildEngineRequest(interval);
        locationEngine.requestLocationUpdates(request, callback, null);
        mapboxNavigation.setLocationEngine(locationEngine);
    }

当我想改变间隔时,我会调用这个方法:

  private void changeLocationEngineInterval(int interval) {
        removeLocationEngineListener();
        LocationEngineRequest request = buildEngineRequest(interval);
        if (ActivityCompat.checkSelfPermission(parentActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(parentActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        locationEngine.requestLocationUpdates(request, callback, null);
        mapboxNavigation.setLocationEngine(locationEngine);
    }

【问题讨论】:

    标签: java android mapbox


    【解决方案1】:

    区间是对象的构造函数的参数,所以你需要销毁第一个LocationEngineRequest,并用你要使用的新区间创建另一个。

    问候

    编辑

    我在这里放了一些示例代码。将您的对象作为全局变量是一个很好的做法,这样您就可以从这两种方法中访问,并且您可以覆盖它而无需删除并重新创建。

    public class ExampleActivity extends AppCompatActivity {
    
    LocationEngineRequest request;
    
    @SuppressLint("MissingPermission")
    private void initializeLocationEngine(int interval) {
        locationEngine =LocationEngineProvider.getBestLocationEngine(parentActivity);
        request = buildEngineRequest(interval);
        locationEngine.requestLocationUpdates(request, callback, null);
        mapboxNavigation.setLocationEngine(locationEngine);
    }
    
    private void changeLocationEngineInterval(int interval) {
        //removeLocationEngineListener(); <-- I don't know what u doing here, but maybe you don't need
        request = buildEngineRequest(interval);
        if (ActivityCompat.checkSelfPermission(parentActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(parentActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        locationEngine.requestLocationUpdates(request, callback, null);
        mapboxNavigation.setLocationEngine(locationEngine);
    }
    

    希望对你有帮助。

    【讨论】:

    • 谢谢s Juan, i tried to destroy the object, but i couldnt。能否提供一些代码?
    • Thanks again Juan! Ive 实现了您的代码,但我发现了一些新东西。如果我不在导航模式下,我的 locationEngine 是否永远不会设置为我的 MapboxNavigation 对象?我只是在地图中显示标记的位置。即使我第一次以 10000 毫秒的间隔初始化我的 locationEngine,它总是每 20000 更新一次我的位置
    猜你喜欢
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 2015-09-12
    • 1970-01-01
    • 2014-06-03
    相关资源
    最近更新 更多