You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发中如何更新LocationRequest优先级(setPriority已弃用)

解决LocationRequest.setPriority()弃用后的优先级更新问题

在com.google.android.gms:play-services-location:21.0.1版本中,LocationRequest是不可变对象,原有的setPriority()方法已被弃用,无法直接修改已构建完成的LocationRequest实例的优先级。正确的处理方式是基于现有实例创建新的Builder,重新配置优先级后生成新的LocationRequest对象。

修改后的代码示例

// 初始化原始LocationRequest
locationRequest = new LocationRequest.Builder(Priority.PRIORITY_BALANCED_POWER_ACCURACY, 1000 * DEFAULT_UPDATE_INTERVAL)
        .setWaitForAccurateLocation(false)
        .setMinUpdateIntervalMillis(1000 * MIN_UPDATE_INTERVAL)
        .setMaxUpdateDelayMillis(1000)
        .build();

sw_gps.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 基于已有LocationRequest创建Builder,继承原有配置
        LocationRequest.Builder requestBuilder = new LocationRequest.Builder(locationRequest);
        
        if (sw_gps.isChecked()) {
            requestBuilder.setPriority(Priority.PRIORITY_HIGH_ACCURACY);
        } else {
            // 恢复为平衡功耗精度的优先级(修正了你原代码中重复设置高优先级的问题)
            requestBuilder.setPriority(Priority.PRIORITY_BALANCED_POWER_ACCURACY);
        }
        
        // 生成新的LocationRequest并替换原对象
        locationRequest = requestBuilder.build();
        
        // 重要提示:如果之前已经发起过位置更新请求,需要用新的LocationRequest重新发起
        // 示例:LocationServices.getFusedLocationProviderClient(getApplicationContext())
        //         .requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
    }
});

关键说明

  • LocationRequest.Builder(LocationRequest)构造方法会完全继承原有实例的所有配置项,只需修改需要变更的优先级即可
  • 不可直接修改已构建的LocationRequest,必须通过build()生成新实例替换原对象
  • 若已通过requestLocationUpdates注册位置监听,需用新的LocationRequest重新调用该方法,否则旧配置会继续生效

内容的提问来源于stack exchange,提问作者dhruv_dt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:15:09