Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class LocationTracker implements GoogleApiClient.ConnectionCallbacks,
- GoogleApiClient.OnConnectionFailedListener, LocationListener{
- private GoogleApiClient mGoogleApiClient;
- // Used to indicate whether the mGoogleApiClient
- // is connected or currently connecting
- private boolean isActive = false;
- public LocationTracker(Context context) {
- mContext = context;
- mGoogleApiClient = new GoogleApiClient.Builder(context)
- .addConnectionCallbacks(this)
- .addOnConnectionFailedListener(this)
- .addApi(LocationServices.API)
- .build();
- }
- public void connect() {
- // Some code for runtime permissions on SDK 21+
- // Some code that displays an alert dialog if location is off
- // It offers to take user to location settings to enable it
- mGoogleApiClient.connect();
- isActive = true;
- }
- @Override
- public void onConnected(Bundle bundle) {
- // Again check for some permissions since lint reports an error otherwise
- // Get a handler which we will use later in case our request expires
- mRequestExpiredHandler = new Handler();
- mRequestExpiredRunnable = new Runnable() {
- @Override
- public void run() {
- informLocationRequestFailed();
- }
- };
- // Create a LocationRequest for getting our location
- LocationRequest request = LocationRequest.create();
- request.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
- request.setInterval(1000);
- request.setFastestInterval(100);
- request.setSmallestDisplacement(0);
- // Set the number of updates to just 1, since we don't need real-time tracking
- request.setNumUpdates(1);
- // Set a timeout period, in case the request can't be fulfilled
- request.setExpirationDuration(1000 * 5);
- LocationServices.FusedLocationApi.requestLocationUpdates(
- mGoogleApiClient, request, this);
- mRequestExpiredHandler.postDelayed(mRequestExpiredRunnable, 1000 * 6);
- }
- @Override
- public void onConnectionSuspended(int i) {
- Log.e("LocationTracker", "onConnectionSuspended");
- }
- @Override
- public void onConnectionFailed(ConnectionResult connectionResult) {
- Log.e("LocationTracker", "onConnectionFailed");
- }
- @Override
- public void onLocationChanged(Location location) {
- // Location reading succeeded, we don't need the Handler callback anymore
- mRequestExpiredHandler.removeCallbacks(mRequestExpiredRunnable);
- // A bunch of code to set the location
- mGoogleApiClient.disconnect();
- isActive = false;
- }
- public boolean isActive(){
- return isActive;
- }
- }
- @Override
- public void onClick(View view) {
- //if (mLocationTracker == null)
- mLocationTracker = new LocationTracker(mContext);
- // Check if the mLocationTracker is already connected or connecting
- if (!mLocationTracker.isActive()){
- mLocationTracker.connect();
- }
- }
- final LocationListener listener = this;
- mRequestExpiredRunnable = new Runnable() {
- @Override
- public void run() {
- LocationServices.FusedLocationApi.removeUpdates(
- mGoogleApiClient, listener);
- informLocationRequestFailed();
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement