1

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

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/ (查看“完整代码”的标题)

4

2 回答 2

3

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

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

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

幸运的是,谷歌在github上提供了一个完整的示例

于 2015-09-12T03:08:50.947 回答
0

实现一个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");
        }
    }
});

修改上述代码以更改标记的可见性。希望这有效。

于 2015-03-16T17:33:37.650 回答