明确识别是不是在后台启用了android服务位置和gps

Posted

技术标签:

【中文标题】明确识别是不是在后台启用了android服务位置和gps【英文标题】:Identify distinctly if android service location and gps is enabled in background明确识别是否在后台启用了android服务位置和gps 【发布时间】:2015-10-05 14:41:54 【问题描述】:

我有这种情况:我的 android 服务位置已启用,但我的 gps(gps 符号)未启用。

我想检查我的服务位置是否已启用并启动活动。 我想检查我的 gps(参见 gps 打印屏幕 - gps 符号)是否已启用,并向用户发送消息。

下面的代码检查我的 gps(参见 gps 打印屏幕 - gps 符号)是否已启用,但不检查服务位置是否已启用。

final LocationManager locationManager =
            (LocationManager) context.getSystemService(context.LOCATION_SERVICE);

    try 
        gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

我需要识别这两种情况并处理这个...

假设我禁用了我的 gps(背景)。 (见 gps 打印屏幕 - gps 符号) 和 我已启用服务位置。

【问题讨论】:

***.com/questions/843675/…的可能重复 就是这样。我检查了使用 locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER 禁用了 gps 我怎么知道我的服务位置是否启用... 看起来您只启用了网络提供商。您也可以使用与检查 GPS 提供商相同的方式进行检查。 没有。在这种情况下,正如您在打印屏幕中看到的那样,我启用了服务位置并禁用了 gps (gps_provider)。 @drschultz 回复后,我明白了你在评论中所说的内容。 【参考方案1】:

如果您使用LocationManager 来确定哪些位置服务可用,您将能够判断位置服务是打开还是关闭。例如,使用以下代码:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Log.d("LOCATION SERVICES", "isGpsEnabled="+isGpsEnabled+" isNetworkEnabled="+isNetworkEnabled);

如果设备定位服务已关闭,isGpsEnabledisNetworkEnabled 都将为 false。如果只是关闭了 GPS,但打开了定位服务,isGpsEnabled 将是错误的,但isNetworkEnabled 将是正确的。如果设备打开了包括 GPS 在内的定位服务,那么两者都是正确的。

【讨论】:

以上是关于明确识别是不是在后台启用了android服务位置和gps的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是启用了“访问我的位置” - Android

我是不是需要获得后台位置更新的“始终”授权?

我如何检查用户是不是真的在他的手机上启用了 android 中的 gps 位置

配套设备配对:是不是需要启用定位服务?

当应用程序处于后台时,带有 PendingIntent 的 Android FusedLocationClient 未收到位置更新

语音识别作为后台服务