我想为此定期(比如每 2 分钟)更新一次当前位置更新,我正在关注官方文档,我编写了这段代码,但它不会每两分钟提供一次当前位置更新,即使在我在 requestLocationUpdates 中传递的 LocationRequest 对象中指定( ),这里是代码:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{
private FusedLocationProviderClient FusedLocationClient;
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
SupportMapFragment map =
getSupportFragmentManager().findFragmentById(R.id.map));
map.getMapAsync(this);
FusedLocationClient LocationServices.getFusedLocationProviderClient(this);
}
@Override
public void onConnected(Bundle bundle) {
FusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
Log.i("MainActivity ", "" + location.getLongitude())
}
}
});
FusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
FusedLocationClient.requestLocationUpdates(requestLocation(),
new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {
for (Location location : locationResult.getLocations()) {
Log.i("MainActivity ", "" + location.getLongitude());
//not getting current location updates every 2 minutes
}
};
},null);
}
@Override
public void onConnectionSuspended(int i) {}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {}
原文由 blackHawk 发布,翻译遵循 CC BY-SA 4.0 许可协议
这类似于我 在此处的其他答案,已更新为使用最近引入的 FusedLocationProviderClient 类。
为了将 FusedLocationProviderClient 与 Google 地图结合使用:
等到谷歌地图准备好
如果需要,在运行时请求位置权限
授予权限后请求位置更新
获取用户位置后更新谷歌地图
首先确保您至少使用 Google Play 服务版本 11,因为旧版本没有 FusedLocationProviderClient 类(新版本也可以):
请注意,FusedLocationProviderClient 在 11.0.2 版本中存在,但由于初始实现存在错误,建议您仅在 11.6.0 及更高版本上使用该类。从文档中:
在 AndroidManifest.xml 文件中添加位置权限,在
manifest
标签内和application
标签外:将 API 密钥添加到
application
标签内的 AndroidManifest.xml:科特林
这是 Kotlin 中完整的 Activity 类:
爪哇
这是 Java 中完整的 Activity 类:
activity_maps.xml:
系统将提示用户接受位置权限:
该位置将在应用程序启动时更新,并且每两分钟更新一次:
关于 AndroidX 的额外说明
如果您使用的是 AndroidX,则 可能需要将这些行添加 到您的
gradle.properties
文件中(有关详细信息,请参见 此处):