Location Manager's requestLocationUpdates called only once

后端 未结 1 1910
广开言路
广开言路 2020-12-13 07:50

I am calling the method and expect location updates multiple times:

locationManager.requestLocationUpdates(\"gps\",0 ,0, loc_listener);

My

1条回答
  •  误落风尘
    2020-12-13 08:11

    I have never seen the issue. The following is my code to test LocationManager and LocationListener. It works as expected when LocationListener is implemented as an anonymous class.

    package com.test.locationmanager;
    
    import android.app.Activity;
    import android.content.Context;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.location.LocationProvider;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class LocationManagerStatus extends Activity {
    
        private LocationManager locationManager;
        private TextView textView;
        private final LocationListener gpsLocationListener =new LocationListener(){
    
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                final String tvTxt = textView.getText().toString();
                switch (status) {
                case LocationProvider.AVAILABLE:
                    textView.setText(tvTxt + "GPS available again\n");
                    break;
                case LocationProvider.OUT_OF_SERVICE:
                    textView.setText(tvTxt + "GPS out of service\n");
                    break;
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    textView.setText(tvTxt + "GPS temporarily unavailable\n");
                    break;
                }
            }
    
            @Override
            public void onProviderEnabled(String provider) {
                textView.setText(textView.getText().toString()
                        + "GPS Provider Enabled\n");
            }
    
            @Override
            public void onProviderDisabled(String provider) {
                textView.setText(textView.getText().toString()
                        + "GPS Provider Disabled\n");
            }
    
            @Override
            public void onLocationChanged(Location location) {
                locationManager.removeUpdates(networkLocationListener);
                textView.setText(textView.getText().toString()
                        + "New GPS location: "
                        + String.format("%9.6f", location.getLatitude()) + ", "
                        + String.format("%9.6f", location.getLongitude()) + "\n");
            }
        };
        private final LocationListener networkLocationListener =
                                                            new LocationListener(){
    
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras){
                final String tvTxt = textView.getText().toString();
                switch (status) {
                case LocationProvider.AVAILABLE:
                    textView.setText(tvTxt + "Network location available again\n");
                    break;
                case LocationProvider.OUT_OF_SERVICE:
                    textView.setText(tvTxt + "Network location out of service\n");
                    break;
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    textView.setText(tvTxt
                            + "Network location temporarily unavailable\n");
                    break;
                }
            }
    
            @Override
            public void onProviderEnabled(String provider) {
                textView.setText(textView.getText().toString()
                        + "Network Provider Enabled\n");
            }
    
            @Override
            public void onProviderDisabled(String provider) {
                textView.setText(textView.getText().toString()
                        + "Network Provider Disabled\n");
            }
    
            @Override
            public void onLocationChanged(Location location) {
                textView.setText(textView.getText().toString()
                        + "New network location: "
                        + String.format("%9.6f", location.getLatitude()) + ", "
                        + String.format("%9.6f", location.getLongitude()) + "\n");
            }
        };
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            textView = (TextView) findViewById(R.id.textview);
            locationManager = (LocationManager) 
                    getSystemService(Context.LOCATION_SERVICE);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 5000, 0,
                    networkLocationListener);
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                    3000, 0, gpsLocationListener);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            locationManager.removeUpdates(networkLocationListener);
            locationManager.removeUpdates(gpsLocationListener);
        }
    }
    

    0 讨论(0)
提交回复
热议问题