📜  如何在 Android 片段中获取当前位置?(1)

📅  最后修改于: 2023-12-03 14:52:13.368000             🧑  作者: Mango

如何在 Android 片段中获取当前位置?

在 Android 应用程序中,很多场景需要获取当前位置。比如地图应用需要显示当前位置,天气应用需要获取当前位置的天气信息等等。在片段(Fragment)中获取当前位置的方法与在活动(Activity)中获取当前位置类似,本文将介绍如何在 Android 片段中获取当前位置。

需要的权限

在获取当前位置前,我们需要先在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
获取当前位置

获取当前位置的方法有很多种,本文将介绍其中两种方法:

方法一:使用 LocationManager
LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    // do something with latitude and longitude
}

以上代码中,我们先通过 getActivity() 方法获取到当前片段所在的活动,然后使用 getSystemService() 方法获取到 LocationManager 实例。接着,我们使用 getLastKnownLocation() 方法获取到最后一次的位置信息。这里使用的是 GPS_PROVIDER,如果您的设备不支持 GPS,可以使用 NETWORK_PROVIDER 或 PASSIVE_PROVIDER。

方法二:使用 FusedLocationProviderClient
FusedLocationProviderClient fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
fusedLocationProviderClient.getLastLocation()
        .addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if (location != null) {
                    double latitude = location.getLatitude();
                    double longitude = location.getLongitude();
                    // do something with latitude and longitude
                }
            }
        });

以上代码中,我们先通过 LocationServices.getFusedLocationProviderClient() 方法获取到 FusedLocationProviderClient 实例。接着,我们使用 getLastLocation() 方法获取到最后一次的位置信息。如果位置信息不为空,我们可以通过 getLocation() 方法获取到纬度和经度。

总结

在 Android 片段中获取当前位置需要申请相应的权限,并选择合适的方法获取位置信息。使用 LocationManager 方法可以直接获取最后一次的位置信息,使用 FusedLocationProviderClient 方法可以获取近期的位置信息。