GPS Android - get positioning only once

后端 未结 2 1826
我寻月下人不归
我寻月下人不归 2020-12-01 06:03

Is there a way to access the GPS once instead of having a looper that constantly checks for location updates?

In my scenario all I\'m interested in is finding the cu

2条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-01 06:42

    Dont use the getLastKnownLocation because that could be returning null or old data.

    This code Only fetches the location once a button is pressed and not every time. People use to leave the location listener listen in every instance and that kills the battery life so Use the code snippet I have posted by doing lots of research:

    // get the text view and buttons from the xml layout
    Button button = (Button) findViewById(R.id.btnGetLocation);
    final TextView latitude = (TextView) findViewById(R.id.textview4);
    final TextView longitude = (TextView) findViewById(R.id.textview5);
    final LocationListener locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                mlocation = location;
                Log.d("Location Changes", location.toString());
                latitude.setText(String.valueOf(location.getLatitude()));
                longitude.setText(String.valueOf(location.getLongitude()));
            }
    
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                Log.d("Status Changed", String.valueOf(status));
            }
    
            @Override
            public void onProviderEnabled(String provider) {
                Log.d("Provider Enabled", provider);
            }
    
            @Override
            public void onProviderDisabled(String provider) {
                Log.d("Provider Disabled", provider);
            }
        };
    
        // Now first make a criteria with your requirements
        // this is done to save the battery life of the device
        // there are various other other criteria you can search for..
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setSpeedRequired(false);
        criteria.setCostAllowed(true);
        criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
        criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);
    
        // Now create a location manager
        final LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    
       // This is the Best And IMPORTANT part
        final Looper looper = null;
    
       // Now whenever the button is clicked fetch the location one time
       button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                locationManager.requestSingleUpdate(criteria, locationListener, looper);
           }
       });
    

提交回复
热议问题