获取Android中的更新位置

时间:2010-06-16 18:11:34

标签: android location

每次单击按钮时,我都会使用下面显示的代码来获取位置的更新值。当我的活动恢复时,我每秒都会得到一次更新,所以当我调用getLastKnownLocation时,我希望有一个位置在最后一秒更新。

这是正确的方法吗?

我希望每次执行'geo fix'命令时触发onLocationChanged事件(或者因为我请求每1秒更新一次,所以在1s后最大值),但它只在第一次触发时触发。为什么呢?

欢迎任何帮助/建议!

由于

package org.digitalfarm.atable;

...

public class Atable extends Activity {
    private Button mSearchButton;
    private TextView mytext;
    private LocationManager locationManager;    


    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);   

        setContentView(R.layout.main);

        mSearchButton = (Button)this.findViewById(R.id.button);

        mytext = (TextView) findViewById(R.id.dude);

        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        final Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);               


        mSearchButton.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {

                  String provider = locationManager.getBestProvider(criteria, true);

                  Location location = locationManager.getLastKnownLocation(provider);             

          }
        });
    }

     //Start a location listener
    LocationListener onLocationChange=new LocationListener() {
        public void onLocationChanged(Location loc) {
            //sets and displays the lat/long when a location is provided
            String latlong = "Lat: " + loc.getLatitude() + " Long: " + loc.getLongitude();   
            mytext.setText(latlong);
        }

        public void onProviderDisabled(String provider) {
        // required for interface, not used
        }

        public void onProviderEnabled(String provider) {
        // required for interface, not used
        }

        public void onStatusChanged(String provider, int status,
        Bundle extras) {
        // required for interface, not used
        }
    };

    //pauses listener while app is inactive
    @Override
    public void onPause() {
        super.onPause();
        locationManager.removeUpdates(onLocationChange);
    }

    //reactivates listener when app is resumed
    @Override
    public void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,100.0f,onLocationChange);
    }
}

1 个答案:

答案 0 :(得分:0)

requestLocationUpdates中指定的时间是最短可能的时间间隔,最多可以进行一次更新。因此,您每秒最多注册一次更新,但实际更新可能需要更多的更新,而且,不能保证这一点。

来自文档:

  

minTime - 通知的最短时间间隔,以毫秒为单位。此字段仅用作节省电量的提示,位置更新之间的实际时间可能比此值更大或更小

尝试将该时间间隔设置为0,如果没有其他问题(虽然这对我来说似乎都很好),您应该“尽可能频繁地”开始获取更新。