Android LocationServices.FusedLocationApi 已弃用

javaAndroid

1个回答

写回答

zhaoxu977

2025-06-26 08:55

+ 关注

Android
Android

Android LocationServices.FusedLocationApi 已弃用,这是一个令许多开发者感到惊讶的消息。然而,这并不意味着我们无法继续在我们的应用程序中使用位置服务。实际上,Google已经提供了一种新的方法来获取设备的位置信息,即使用新的 LocationServices.getFusedLocationProviderClient() 方法。在本文中,我们将探讨如何使用新的方法来获取设备的位置,并提供一个简单的案例代码来说明其用法。

如何使用 LocationServices.getFusedLocationProviderClient()

在开始使用新的方法之前,我们需要在项目的 build.gradle 文件中添加以下依赖项:

implementation 'com.Google.Android.gms:play-services-location:17.0.0'

添加完依赖项后,我们可以使用以下代码来获取设备的位置信息:

Java

FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

fusedLocationClient.getLastLocation()

.addOnSuccessListener(this, new OnSuccessListener<Location>() {

@Override

public void onSuccess(Location location) {

if (location != null) {

// 在这里处理获取到的位置信息

}

}

});

在上面的代码中,我们首先通过调用 LocationServices.getFusedLocationProviderClient() 方法来获取 FusedLocationProviderClient 的实例。然后,我们可以使用 getLastLocation() 方法来获取设备的最后已知位置。如果成功获取到位置信息,我们可以在 onSuccess() 方法中对其进行处理。

案例代码:获取设备的位置信息

下面是一个简单的案例代码,用于获取设备的位置信息并在控制台上输出经纬度信息:

Java

import Android.Manifest;

import Android.content.pm.PackageManager;

import Android.location.Location;

import Android.os.Bundle;

import Android.util.Log;

import Androidx.appcompat.app.AppCompatActivity;

import Androidx.core.app.ActivityCompat;

import Androidx.core.content.ContextCompat;

import com.Google.Android.gms.location.FusedLocationProviderClient;

import com.Google.Android.gms.location.LocationServices;

public class MAInActivity extends AppCompatActivity {

private static final int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;

private static final String TAG = "MAInActivity";

private FusedLocationProviderClient fusedLocationClient;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setcontentView(R.layout.activity_mAIn);

fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)

!= PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.ACCESS_FINE_LOCATION},

PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);

} else {

requestLocation();

}

}

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

if (requestCode == PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION) {

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

requestLocation();

}

}

}

private void requestLocation() {

fusedLocationClient.getLastLocation()

.addOnSuccessListener(this, new OnSuccessListener<Location>() {

@Override

public void onSuccess(Location location) {

if (location != null) {

double latitude = location.getLatitude();

double longitude = location.getLongitude();

Log.d(TAG, "Latitude: " + latitude + ", Longitude: " + longitude);

}

}

});

}

}

在上面的案例代码中,我们首先检查是否已经获取了 ACCESS_FINE_LOCATION 权限。如果没有,则使用 ActivityCompat.requestPermissions() 方法来请求该权限。如果已经获取了权限,我们调用 requestLocation() 方法来获取设备的位置信息,并在控制台上输出经纬度信息。

尽管 Android LocationServices.FusedLocationApi 已被弃用,但我们仍然可以使用新的 LocationServices.getFusedLocationProviderClient() 方法来获取设备的位置信息。在本文中,我们学习了如何使用新的方法,并提供了一个简单的案例代码来演示其用法。通过使用新的方法,我们可以继续为我们的应用程序提供准确和实时的位置信息。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号