1

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

PS:我使用的是网络位置提供程序,而不是 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);

}   
4

1 回答 1

1

选项1

如果您需要调用onLocationChangeddont use requestLocationUpdates,因为 API 在自定义 android 手机(三星)上完全不可靠。最好使用 AlarmManager 和 call getLastKnownLocation,然后给onLocationChanged自己打电话。

另请注意,三星手机上的 getLastKnowLocation 是错误的,因此您需要触发api 更新幕后,然后才能期望它返回一个好的位置。

在 getLastKnownLocation 之前调用它,它是一个 hack。

注意:这对您的应用程序没有任何作用,只会触发后端缓存以具有良好的Last Known Location

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 有点 API,您可以与 AlarmManager 一起使用。使用 LocationClient,您无需担心最佳供应商、可用供应商、准确度选择和传感器。LocationClient 将它们全部合并为 1 个不错的 API。

对于报警管理器

经过一番痛苦,我让它工作了。所以这里,链接

于 2013-06-21T03:51:33.243 回答