使用 Fused Location Provider 获取启用/禁用位置服务的信息

Posted

技术标签:

【中文标题】使用 Fused Location Provider 获取启用/禁用位置服务的信息【英文标题】:Get information of Location Services enabled/disabled using Fused Location Provider 【发布时间】:2015-05-17 00:08:25 【问题描述】:

我正在开发一个使用 Google 地图并跟踪用户位置的应用。我想改变“你在这里!”的可见性。当用户手动关闭定位服务或服务进入无法访问状态时标记。该方法可以返回定位服务是否开启的信息:

private boolean isLocationServicesEnabled() 
    LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER) || lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
        return true;
    
    return false;

但是,我不想检测一次定位服务的状态。每当用户打开或关闭位置服务时,我都应该检测到它并更改标记的可见性。简而言之,这个草率的伪代码解释了我想听的内容:

while application runs
   if location services turn off
      change marker visibility to false
   else
      change marker visibility to true 

我没有找到没有 android.location.LocationListener 的方法来完成这个任务,只想使用 Fused Location Provider 来实现它。你有什么主意吗?如果你想看,这是我使用的核心结构:

http://www.androidhive.info/2015/02/android-location-api-using-google-play-services/ (查看标题“完整代码”)

【问题讨论】:

【参考方案1】:

以正确的方式执行此操作涉及大量代码。您必须使用SettingsApi 类的位置。

与位置交互的主要入口点 设置启用 API。

此 API 可让应用轻松确保设备的系统 设置已针对应用的位置需求进行了正确配置。

幸运的是,Google 在github 上提供了完整的示例

【讨论】:

【参考方案2】:

实现一个gps监听器怎么样?

mLocationManager.addGpsStatusListener(new GpsStatus.Listener()

    @Override
    public void onGpsStatusChanged(int event) 
        if(event==GpsStatus.GPS_EVENT_STARTED)
            Log.d(TAG,"Gps Started");
        else if(event==GpsStatus.GPS_EVENT_STOPPED)
            Log.d(TAG,"Gps Stopped");
        
    
);

修改上述代码以更改标记的可见性。希望这行得通。

【讨论】:

我考虑过这个。如果 GPS 供应商关闭而网络供应商继续工作怎么办?我在这里用一种荒谬的方法解决了这个难题:***.com/questions/29053674/…

以上是关于使用 Fused Location Provider 获取启用/禁用位置服务的信息的主要内容,如果未能解决你的问题,请参考以下文章

使用 Location Manager 和 Fused Location Provider Api 获取位置有啥区别?

使用 Fused Location Provider 查找位置源

如何使用 Fused Location 订阅提供者状态更改事件?

使 Fused Location Provider LocationClient 更易于使用

如何在 Service 类中使用 Fused Location Provider?

从 Fused Location Provider 获取 GPS 或网络提供商