Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GPS Android - get positioning only once

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 current co-ordinates and not a continuous connection with the GPS satellite. Does anyone have any ideas how this can be done? Thanks in advance.

like image 543
progdoc Avatar asked May 09 '12 21:05

progdoc


People also ask

How do I use requestLocationUpdates?

Before requesting location updates, your app must connect to location services and make a location request. The lesson on Changing Location Settings shows you how to do this. Once a location request is in place you can start the regular updates by calling requestLocationUpdates() .

What is location accuracy in Android?

GPS: Maps uses satellites to know your location up to around 20 meters. When you're inside buildings or underground, the GPS is sometimes inaccurate. Wi-Fi: The location of nearby Wi-Fi networks helps Maps know where you are. Cell tower: Your connection to mobile data can be accurate up to a few thousand meters.

What is fused location provider client?

The fused location provider is a location API in Google Play services that intelligently combines different signals to provide the location information that your app needs.


1 Answers

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);        }    }); 
like image 186
msmukesh4 Avatar answered Sep 24 '22 00:09

msmukesh4