Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. public class LocationTracker implements GoogleApiClient.ConnectionCallbacks,
  2. GoogleApiClient.OnConnectionFailedListener, LocationListener{
  3.  
  4. private GoogleApiClient mGoogleApiClient;
  5.  
  6. // Used to indicate whether the mGoogleApiClient
  7. // is connected or currently connecting
  8. private boolean isActive = false;
  9.  
  10. public LocationTracker(Context context) {
  11.  
  12. mContext = context;
  13.  
  14. mGoogleApiClient = new GoogleApiClient.Builder(context)
  15. .addConnectionCallbacks(this)
  16. .addOnConnectionFailedListener(this)
  17. .addApi(LocationServices.API)
  18. .build();
  19. }
  20.  
  21. public void connect() {
  22.  
  23. // Some code for runtime permissions on SDK 21+
  24.  
  25. // Some code that displays an alert dialog if location is off
  26. // It offers to take user to location settings to enable it
  27.  
  28. mGoogleApiClient.connect();
  29. isActive = true;
  30. }
  31.  
  32. @Override
  33. public void onConnected(Bundle bundle) {
  34.  
  35. // Again check for some permissions since lint reports an error otherwise
  36.  
  37. // Get a handler which we will use later in case our request expires
  38. mRequestExpiredHandler = new Handler();
  39.  
  40. mRequestExpiredRunnable = new Runnable() {
  41. @Override
  42. public void run() {
  43. informLocationRequestFailed();
  44. }
  45. };
  46.  
  47. // Create a LocationRequest for getting our location
  48. LocationRequest request = LocationRequest.create();
  49.  
  50. request.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
  51.  
  52. request.setInterval(1000);
  53. request.setFastestInterval(100);
  54.  
  55. request.setSmallestDisplacement(0);
  56.  
  57. // Set the number of updates to just 1, since we don't need real-time tracking
  58. request.setNumUpdates(1);
  59.  
  60. // Set a timeout period, in case the request can't be fulfilled
  61. request.setExpirationDuration(1000 * 5);
  62.  
  63. LocationServices.FusedLocationApi.requestLocationUpdates(
  64. mGoogleApiClient, request, this);
  65.  
  66. mRequestExpiredHandler.postDelayed(mRequestExpiredRunnable, 1000 * 6);
  67. }
  68.  
  69. @Override
  70. public void onConnectionSuspended(int i) {
  71. Log.e("LocationTracker", "onConnectionSuspended");
  72. }
  73.  
  74.  
  75. @Override
  76. public void onConnectionFailed(ConnectionResult connectionResult) {
  77. Log.e("LocationTracker", "onConnectionFailed");
  78. }
  79.  
  80. @Override
  81. public void onLocationChanged(Location location) {
  82.  
  83. // Location reading succeeded, we don't need the Handler callback anymore
  84. mRequestExpiredHandler.removeCallbacks(mRequestExpiredRunnable);
  85.  
  86. // A bunch of code to set the location
  87.  
  88. mGoogleApiClient.disconnect();
  89. isActive = false;
  90. }
  91.  
  92.  
  93. public boolean isActive(){
  94. return isActive;
  95. }
  96. }
  97.  
  98. @Override
  99. public void onClick(View view) {
  100. //if (mLocationTracker == null)
  101. mLocationTracker = new LocationTracker(mContext);
  102.  
  103. // Check if the mLocationTracker is already connected or connecting
  104. if (!mLocationTracker.isActive()){
  105. mLocationTracker.connect();
  106. }
  107. }
  108.  
  109. final LocationListener listener = this;
  110. mRequestExpiredRunnable = new Runnable() {
  111. @Override
  112. public void run() {
  113. LocationServices.FusedLocationApi.removeUpdates(
  114. mGoogleApiClient, listener);
  115. informLocationRequestFailed();
  116. }
  117. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement