地图和位置监听器的一些问题 - Android

时间:2013-11-15 08:08:49

标签: android google-maps location

关于Google maps api及其用法等,我有几个问题。有关我迄今为止所做的工作的简要背景是我在实现OnMyLocationChangeListener和LocationListener时显示了扩展FragmentActivity的地图。然后我设置了LocationManager并从中获得了我的位置。地图工作正常。我的位置也会在地图上显示一个蓝色标记,一切看起来都是......

  1. 问题是当我使用GPRS / EDGE运行应用程序时,我的位置没有更新。我的意思是它会更新,但经过很长一段时间(2或3分钟)后,即使这样,标记也被错放了几百米,并没有显示我的确切位置。为什么会出现这个问题?我的GPRS / EDGE是问题吗?它会在3G上“快速工作”/“显示正确的位置”吗?

  2. 第二个问题是永远不会调用OnLocationChanged(位置位置)函数。而onMyLocationChange(位置位置)每次都被调用。这是正确的行为吗?或者是否应该像onMyLocationChange(位置位置)函数一样频繁地调用OnLocationChanged(位置位置)函数?

  3. 要解决的第三个也是最重要的一个问题是我在地图上放了几个标记,我需要计算每个标记与我位置的距离。现在,当我移动时,我和所有标记之间的距离发生变化,我已经实现了一个循环来计算距离并将它们保存在onMyLocationChange(位置位置)函数的数组中,但它被一次又一次地快速调用循环根本不执行。有没有其他选择,我可以简单地调用这些函数(比如说)五秒钟,所以在五秒钟内,for循环正确完全执行并且我的距离数组被填充。

        FragmentManager myFragmentManager = getSupportFragmentManager();
    SupportMapFragment mySupportMapFragment 
    = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
    myMap = mySupportMapFragment.getMap();
    
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    
    if(locationManager != null){
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
                0, 0, this);
        Location location = locationManager.
                getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    
        myPosition = new LatLng(location.getLatitude(), location.getLongitude());
    } 
    else {
        Toast toast = Toast.makeText(this, "Location manager is null", Toast.LENGTH_LONG);
        toast.show();
    }
    
    myMap.setMyLocationEnabled(true);
    myMap.setOnMyLocationChangeListener(this);
    myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myPosition, 16));
    
     public void onMyLocationChange(Location location) {
    
    myPosition = new LatLng(location.getLatitude(), location.getLongitude());
    
    Toast toast = Toast.makeText(this, "This one is always called", Toast.LENGTH_LONG);
    toast.show();
       }
    
        @Override
     public void onLocationChanged(Location location) {
    
    myPosition = new LatLng(location.getLatitude(), location.getLongitude());
    
    Toast toast = Toast.makeText(this, "This one never gets called", Toast.LENGTH_LONG);
    toast.show();
      }
    

1 个答案:

答案 0 :(得分:0)

由于您尚未发布任何代码行,因此难以获得准确的图片,但至于您的问题没有。 3:

您可以设置您希望在位置更改时获得通知的频率,您当然有类似的代码行,将方法调用的第2和第3个参数设置为不同于0的值。这应该给您时间执行必要的计算。

locationManager.requestLocationUpdates(locationProvider, minInterval, minDistance, locationListener);

在开发位置感知应用时,Android开发者网站有an article worth reading