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 4.4 KitKat 随机崩溃

防止应用程序显示在 android kitkat 4.4.2 上的最近应用程序列表中

Android KitKat:实现后台服务以在应用程序卸载(或失去前台)时执行某些操作

透明状态栏 - Android 4.4 (KitKat) 之前

KitKat 中的 Textinputlayout 膨胀异常