KitKat 上的位置检测
Posted
技术标签:
【中文标题】KitKat 上的位置检测【英文标题】:Location detection on KitKat 【发布时间】:2014-11-01 09:45:11 【问题描述】:到目前为止,当使用 LocationClient 来获取用户的最后一个已知位置时,我没有遇到任何问题,例如在 Jelly Bean 上进行测试。
我有一个 KitKat 手机进行测试,我发现 Settings -> Location 中有一个 DEFAULT 设置,称为“仅限设备”,它完全依赖 GPS 来启动、连接和获取位置。这需要一段时间。另外,当我在室内时,它可能找不到任何位置。
如果我转到“设置”并切换到“高精度”,我会返回我的应用,BAM 位置就在那里。
问题是:
如何检测 KitKat 上设置了这三个位置设置中的哪一个并要求用户更改(或直接自己更改)
三个设置分别是:
-仅限设备
-省电模式
-高精度
【问题讨论】:
【参考方案1】:据我所知,您可以使用LocationManager
类单独确定启用/禁用哪些服务。
locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
因此,您所要做的就是确定其中哪些已启用,并采取相应措施。如果其中任何一个被禁用,您可以要求用户打开它们。
if(!isGPSEnabled)
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
if(!isNetworkEnabled)
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
编辑:
您可以使用LocationManager
类来正确设置您的设置,然后使用LocationClient
来实际收集位置信息。
【讨论】:
在阅读了大量关于它是旧的位置 API 以及 LocationClient 如何变得更好和新的方式的文章后,几周前我刚刚停止使用 LocationManager 类。确实,在转换之后,很多问题都消失了。我不想回去使用它。 是这样吗?我不知道。官方页面中肯定没有提到:developer.android.com/reference/android/location/… :) 看看这个讨论。看起来两者各有利弊......***.com/questions/18916273/…也许我使用它们的组合? 没错。您可以使用LocationManager
来确保您的设置正确。无论哪种方式,让我们看看其他人是否想出了更好的东西!
但是这个 .isProviderEnabled(LocationManager.GPS_PROVIDER);将为仅设备和高精度返回 true。我需要确切知道正在使用哪一个。以上是关于KitKat 上的位置检测的主要内容,如果未能解决你的问题,请参考以下文章
如何避免使用 KITKAT 4.4.2 版本的 SD 卡上的“EACCES 权限被拒绝”。谷歌的新政策
防止应用程序显示在 android kitkat 4.4.2 上的最近应用程序列表中
Android KitKat:实现后台服务以在应用程序卸载(或失去前台)时执行某些操作