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
相关产品推荐
相关产品推荐

