使用网络位置提供商每30秒更新一次位置?

时间:2013-06-21 01:22:59

标签: android

每次调用onLocationChanged的秒数是多少? 我想每隔30秒更新用户的位置,我不知道该怎么做。

P.S:我正在使用网络位置提供商,而不是GPS。我知道GPS更准确但我关心电池消耗和室内位置。

这是我每隔一段时间调用自己的方法(我不知道每一个时间到底有多少)..

TextView tvLong,tvLati;
    Button btnGet;
    private LocationManager locationManager;
    private String provider;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    tvLong =(TextView)findViewById(R.id.tvLong);
    tvLati = (TextView)findViewById(R.id.tvLati);
    btnGet = (Button)findViewById(R.id.btnGet);
    btnGet.setOnClickListener(this);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);

        // Initialize the location fields
        if (location != null) {
        System.out.println("Provider " + provider + " has been selected.");
            onLocationChanged(location);
        } else {
            tvLati.setText("Location not available");
            tvLong.setText("Location not available");
        }

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this); // I dont know what this exactly DOES.

}
public void onLocationChanged(Location location) {

    lat =  (location.getLatitude());
    lng = (location.getLongitude());
    String valueLati = "Latitude: " + lat;
    String valueLong = "Longitude: " + lng;

    tvLati.setText(valueLati);
    tvLong.setText(valueLong);

}   

1 个答案:

答案 0 :(得分:1)

选项1

如果您需要致电onLocationChanged,请不要使用requestLocationUpdates,因为API在自定义Android手机(三星)上完全不可靠。最好使用AlarmManager并拨打getLastKnownLocation,然后自己致电onLocationChanged

另请注意,getLastKnowLocation在三星手机上有问题,因此您需要触发 api才能在场景后面进行更新,然后才能让它返回一个好的位置。

在getLastKnownLocation之前调用它,这是一个黑客。

注意:这对您的应用程序没有任何作用,只是触发后端缓存以获得良好的上一个已知位置

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
        @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(final Location location) {
        }
    });

选项2

全部垃圾,并使用新的LocationClient API。它也有一个getLastLocation kinda API,你可以使用AlarmManager。使用LocationClient,您无需为最佳提供商,可用提供商,精度选择和传感器而烦恼。 LocationClient将它们全部合并为一个不错的API。

适用于警报管理器

我在经历了一些痛苦之后才开始工作。所以,link