如何以编程方式找出打开了哪种位置模式?

How do I find out programmatically which mode of Location is turned on?

我正在开发一个应用程序,在该应用程序中,仅使用 GPS 提供商(位置的仅设备模式)来跟踪用户的位置。因此,如果用户将其位置优先级设置为使用 Wifi 和数据的近似位置,应用程序将无法按预期工作。因此,我需要以编程方式检查用户选择的位置模式(高精度、近似位置或仅设备)并显示相应的对话框。实现这一目标的干净方法是什么?

您可以LocationProvider.getAccuracy: https://developer.android.com/reference/android/location/LocationProvider.html

来自文档: int getAccuracy () Returns 描述此提供程序的水平精度的常量。如果提供者 returns 更细粒度或精确位置,则返回 ACCURACY_FINE,否则如果位置只是近似值,则返回 ACCURACY_COARSE。

1、检查提供商模式(gps、网络、cellar-id)

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
//get currently used providers
locationManager.getProviders(true);

2、显示对话框

new AlertDialog.Builder(this).
setTitle("Title").
setMessage("content").
show();

请注意,您的应用将适用于仅 GPS 模式和高精度模式,因为这两种设置都启用了 GPS。

为了检查 GPS 是否启用,这就可以了。

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

if (!isGpsEnabled) {
   //show your alert here
}