-
Notifications
You must be signed in to change notification settings - Fork 6.1k
/
GoogleApiClient.java
140 lines (101 loc) · 3.98 KB
/
GoogleApiClient.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
public class MyLocationListener
implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener
{
private final String TAG = "LOC_RECURRING_SAMPLE";
// Constants that define how often location updates will be delivered
private final long LOC_UPDATE_INTERVAL = 10000; // 10s in milliseconds
private final long LOC_FASTEST_UPDATE = 5000; // 5s in milliseconds
protected GoogleApiClient mGoogleApiClient;
protected LocationRequest mLocRequest;
public Location mCurLocation;
Context context;
public MyLocationListener( Context context) {
this.context=context;
mCurLocation = null;
// build the Play Services client object
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mLocRequest=new LocationRequest();
mLocRequest.setInterval(LOC_UPDATE_INTERVAL);
mLocRequest.setFastestInterval(LOC_FASTEST_UPDATE);
mLocRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// TODO: create the LocationRequest we'll use for location updates
onStart();
}
public void startLocationUpdates() {
// TODO: start the location updates
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient,mLocRequest,this);
}
public void stopLocationUpdates() {
// TODO: stop the updates
LocationServices.FusedLocationApi.removeLocationUpdates(
mGoogleApiClient, this);
}
protected void updateUI() {
// take the lat and long of the current location object and add it to the list
if (mCurLocation != null) {
String lat = String.format("Lat: %f\n", mCurLocation.getLatitude());
String lon = String.format("Lon: %f\n", mCurLocation.getLongitude());
}
}
protected void initializeUI() {
// start by getting the last known location as a starting point
if (mCurLocation == null) {
mCurLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
updateUI();
}
}
/**
* Called to handle the button clicks in the view
*/
public void onClick(int id ) {
switch (id){
case 1:
startLocationUpdates();
break;
case 0:
stopLocationUpdates();
break;
}
}
/**
* Called by Play Services when the user's location changes
*/
@Override
public void onLocationChanged(Location loc) {
mCurLocation = loc;
LocationService.location=loc;
updateUI();
}
/**
* Google Play Services Lifecycle methods
*/
@Override
public void onConnected(Bundle connectionHint) {
initializeUI();
startLocationUpdates();
}
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.d(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode());
}
@Override
public void onConnectionSuspended(int cause) {
Log.d(TAG, "Connection was suspended for some reason");
mGoogleApiClient.connect();
}
/**
* Activity lifecycle events
*/
public void onStart() {
mGoogleApiClient.connect();
}
public void onStop() {
mGoogleApiClient.disconnect();
}
}