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

Posted

技术标签:

【中文标题】如何以编程方式找出打开了哪种位置模式?【英文标题】:How do I find out programmatically which mode of Location is turned on? 【发布时间】:2016-10-11 13:41:19 【问题描述】:

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

【问题讨论】:

在这里看看答案:***.com/questions/30467850/… @DanielNugent 我不想要广播接收器那么重的东西。我觉得凯伦的答案是要走的路。让我检查一下。 那个链接的答案有你需要的代码,但也有很多其他的东西。我刚刚在这里发布了一个答案,其中只有您需要的代码...... 【参考方案1】:

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

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

【讨论】:

谢谢让我看看!【参考方案2】:

1、查看provider模式(gps、network、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();

【讨论】:

【参考方案3】:

请注意,您的应用可以在仅 GPS 模式和高精度模式下运行,因为这两种设置都启用了 GPS。

为了检查 GPS 是否已启用,这可以解决问题。

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

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

if (!isGpsEnabled) 
   //show your alert here

【讨论】:

以上是关于如何以编程方式找出打开了哪种位置模式?的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过代码以编程方式打开位置服务吗

腾讯地图怎么做许多标记

Android:我可以通过多少种方式以编程方式获取当前位置

应用程序打开时如何以编程方式恢复位置访问

如何检测以编程方式触摸了哪个子视图

在 Android 中以编程方式打开位置提供程序