์ฌ์ฉ์์ ํ์ฌ ์์น๋ฅผ ์ป๋ ๋ฐ ์ค์ ์ ๋ ์ฑ์ ๋ง๋ค๊ณ Google Places API ๋ฅผ ํตํด ์์ ๊ณผ ๊ฐ๊น์ด ๊ด์ฌ ์ง์ (์ : ๋ฐ, ๋ ์คํ ๋ ๋ฑ)์ ์ฐพ๊ณ ์ถ์ต๋๋ค .
์น์ ์์ํ ์ฅ์๋ฅผ ๊ฒ์ ํ ๋ LocationManager
์์
์ ์ฌ์ฉํ๋ ์ผ๋ถ ์์ต์ ์ ์ฌ์ฉ์ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด Google Play ์๋น์ค ๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ถ ์์ต์๋ฅผ ๋ณด์์ต๋๋ค.
์ฒซ๋์ ๋ ์ฌ๋ ๋ชจ๋ ๊ฐ์ ์ผ์ํ์ง๋ง, ์ด๊ฒ์ ์ต์ํ์ง ์์์ ์ฝ๊ฐ ํผ๋ ์ค๋ฌ์ ์ผ๋ฉฐ ์ด๋ค ๋ฐฉ๋ฒ์ด ๋ด ์๊ตฌ์ ๊ฐ์ฅ ์ ํฉํ ์ง ์ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ๋น์ ์๊ฒ ๋ฌป๊ณ ์ถ์ต๋๋ค :
์์น๋ฅผ ์ฐพ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ต๋ณ
Android์ ์ฌ์ฉ์ ์์น
์๋๋ก์ด๋์์ ์ฌ์ฉ์์ ์์น๋ฅผ โโ์ป๋ ๊ฒ์ iOS๋ณด๋ค ๋ ๊ฐ๋จํฉ๋๋ค. ํผ๋์ ์์ํ๊ธฐ ์ํด ์์ ํ ๋ค๋ฅธ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋์ Android API๋ฅผ ์ฌ์ฉ android.location.LocationListener
ํ๊ณ ๋ ๋ฒ์งธ๋ Google Play Services API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ com.google.android.gms.location.LocationListener
์
๋๋ค. ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ดํด ๋ณด์.
-
์๋๋ก์ด๋์ ์์น API
Android์ ์์น API๋ ์ธ ๊ฐ์ง ๋ค๋ฅธ ์ ๊ณต ์ ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์น๋ฅผ ์ป์ต๋๋ค.
LocationManager.GPS_PROVIDER
โ์ด ๊ณต๊ธ์๋ ์์ฑ์ ์ฌ์ฉํ์ฌ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์กฐ๊ฑด์ ๋ฐ๋ผ์ด ๊ณต๊ธ์๋ ์์น ์์ ์ ๋ฐํํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.LocationManager.NETWORK_PROVIDER
โ์ด ๊ณต๊ธ์๋ ์ ํ์ ๋ฐ WiFi ์ก์ธ์ค ํฌ์ธํธ์ ๊ฐ์ฉ์ฑ์ ๋ฐ๋ผ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๋คํธ์ํฌ ์กฐํ๋ฅผ ํตํด ๊ฒ์๋ฉ๋๋ค.LocationManager.PASSIVE_PROVIDER
โ์ด ์ ๊ณต์๋ ๋ค๋ฅธ ์ ๊ณต์๊ฐ ์์ฑ ํ ์์น๋ฅผ ๋ฐํํฉ๋๋ค. ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ์๋น์ค๊ฐ ์ค์ ๋ก ์์น๋ฅผ ์ง์ ์์ฒญํ์ง ์๊ณ ์์ฒญํ๋ฉด ์์น ์ ๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก๋ฐ์ต๋๋ค.
์์ ์ LocationManager
์์คํ
์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ ์์ ๊ตฌํ LocationListener
ํ๊ณ ๋ฅผ ํธ์ถํ๋ค๋ requestLocationUpdates
๊ฒ LocationManager
์
๋๋ค.
๋ค์์ ์ฝ๋ ์ค ๋ํซ์ ๋๋ค.
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
์์น ์ ๋ต์ ๋ํ Google API ๊ฐ์ด๋์ฝ๋๋ฅผ ๊ฝค ์ ์ค๋ช
ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Google ์์น ์๋น์ค API๋ฅผ ๋์ ์ฌ์ฉํ๋ฉด ๋ฐฐํฐ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋๊ณ ์ ํ์ฑ์ด ํฅ์ ๋ฉ๋๋ค. ์ด์ ํผ๋์ด ์์๋ฉ๋๋ค!
- Google์ ์์น ์๋น์ค API
Google์ ์์น ์๋น์ค API๋ Google Play ์๋น์ค APK์ ์ผ๋ถ์ ๋๋ค ( ์ค์ ๋ฐฉ๋ฒ ). ๊ทธ๊ฒ๋ค์ Android API ์์ ๊ตฌ์ถ๋์์ต๋๋ค. ์ด API๋ ์์์ ์ธ๊ธ ํ ๊ณต๊ธ์ ๋์ โํจ์ฆ ์์น ๊ณต๊ธ์โ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๊ณต๊ธ์๋ ์ ํ๋, ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋ ๋ฑ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ ๊ธฐ๋ณธ ๊ณต๊ธ์๋ฅผ ์๋์ผ๋ก ์ ํํฉ๋๋ค. ์์คํ ์ ์ฒด ์๋น์ค์์ ์์น๋ฅผ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ ์ ๋ฐ์ดํธํ๋ฏ๋ก ์๋๊ฐ ๋น ๋ฆ ๋๋ค. ์ง์ค ํ์ฑ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Google์ ์์น ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฑ์ด์ ์ฐ๊ฒฐ๋์ด ์์ด์ผํฉ๋๋ค GooglePlayServicesClient
. ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ํ๋ (๋๋ ์กฐ๊ฐ ๋ฑ)์ ๊ตฌํ GooglePlayServicesClient.ConnectionCallbacks
ํ๊ณ GooglePlayServicesClient.OnConnectionFailedListener
์ธํฐํ์ด์ค ํด์ผํฉ๋๋ค . ์ํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class MyActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener {
LocationClient locationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
locationClient = new LocationClient(this, this, this);
}
@Override
public void onConnected(Bundle bundle) {
Location location = locationClient.getLastLocation() ;
Toast.makeText(this, "Connected to Google Play Services", Toast.LENGTH_SHORT).show();
}
@Override
public void onDisconnected() {
Toast.makeText(this, "Connected from Google Play Services.", Toast.LENGTH_SHORT).show();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
// code to handle failed connection
// this code can be found here โ http://developer.android.com/training/location/retrieve-current.html
}
- ์
locationClient.getLastLocation()
null์ ๋๊น?
๋ locationClient.getLastLocation()
ํด๋ผ์ด์ธํธ์์ ๋ง์ง๋ง์ผ๋ก ์๋ ค์ง ์์น๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฌ๋ Fused Location Provider๋ ํ๋ ์ด์์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ์๋ง ๋ฐฑ๊ทธ๋ผ์ด๋ ์์น๋ฅผ ์ ์งํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋๋ฉด ์ฆ์ ์์น๋ฅผ ๊ฐ์ ธ ์ค๋ ค๊ณ ์๋ํฉ๋๋ค. ๋น์ ์ ํ๋์ด ์ฐ๊ฒฐํ๋ ์ฒซ ๋ฒ์งธ ํด๋ผ์ด์ธํธ์ด๋ฉฐ ํธ์ถํ๋ฉด getLastLocation()
์ฆ์์์ onConnected()
์ฒซ ๋ฒ์งธ ์์น์ ์ฌ ์์๋ ์ถฉ๋ถํ ์๊ฐ์ด๋์ง ์์ ์๋.์ด ๋ฐ์ํฉ๋๋ค location
๋๊ณ null
.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๊ณต๊ธ์๊ฐ ์์น getLastLocation()
๋ฅผ ํ์
ํ ๋๊น์ง (๋ถํ์คํ๊ฒ) ๊ธฐ๋ค๋ ธ๋ค๊ฐ์ ํธ์ถ ํด์ผํฉ๋๋ค. ๋ ๋ค๋ฅธ (๋ ๋์) ์ต์
์ com.google.android.gms.location.LocationListener
์ฃผ๊ธฐ์ ์์น ์
๋ฐ์ดํธ๋ฅผ ์์ ํ๋๋ก ์ธํฐํ์ด์ค ๋ฅผ ๊ตฌํํ๋ ๊ฒ์
๋๋ค (์ฒซ ๋ฒ์งธ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ผ๋ฉด ๋์ญ์์ค).
public class MyActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener {
// . . . . . . . . more stuff here
LocationRequest locationRequest;
LocationClient locationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
// . . . . other initialization code
locationClient = new LocationClient(this, this, this);
locationRequest = new LocationRequest();
// Use high accuracy
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// Set the update interval to 5 seconds
locationRequest.setInterval(UPDATE_INTERVAL);
// Set the fastest update interval to 1 second
locationRequest.setFastestInterval(FASTEST_INTERVAL);
}
// . . . . . . . . other methods
@Override
public void onConnected(Bundle bundle) {
Location location = locationClient.getLastLocation();
if (location == null)
locationClient.requestLocationUpdates(locationRequest, this);
else
Toast.makeText(getActivity(), "Location: " + location.getLatitude() + ", " + location.getLongitude(), Toast.LENGTH_SHORT).show();
}
// . . . . . . . . other methods
@Override
public void onLocationChanged(Location location) {
locationClient.removeLocationUpdates(this);
// Use the location here!!!
}
์ด ์ฝ๋์์๋ ํด๋ผ์ด์ธํธ์ ์ด๋ฏธ ๋ง์ง๋ง ์์น ( onConnected
) ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค . ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์์น ์
๋ฐ์ดํธ๋ฅผ ์์ฒญํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ๋ฐ์ผ๋ฉด onLocationChanged()
์ฆ์ ์ฝ๋ฐฑ์ผ๋ก ์์ฒญ์ ๋๋๋ค .
(๊ฐ) ์ฐธ๊ณ locationClient.requestLocationUpdates(locationRequest, this);
๊ฐ์ด ์์ ์์ด์ผํ๋ onConnected
์ฝ๋ฐฑ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋น์ ์ ์ป์ ๊ฒ์ด๋ค IllegalStateException
๋น์ ์ ๊ตฌ๊ธ ํ๋ ์ด ์๋น์ค ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐํ์ง ์๊ณ ์์น์ ๋ํ ์์ฒญํ๋ ค๊ณ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์.
- ์ฌ์ฉ์๊ฐ ์์น ์๋น์ค๋ฅผ ์ฌ์ฉ ์ค์งํ์ต๋๋ค
๋ง์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์ ์ฝํ๊ฑฐ๋ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ๋ฅผ ์ํด ์์น ์๋น์ค๋ฅผ ๋นํ์ฑํํ์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์์ ์ฝ๋๋ ์ฌ์ ํ ์์น ์
๋ฐ์ดํธ๋ฅผ ์์ฒญํ์ง๋ง onLocationChanged
ํธ์ถ๋์ง๋ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์์น ์๋น์ค๋ฅผ ๋นํ์ฑํํ๋์ง ํ์ธํ์ฌ ์์ฒญ์ ์ค์ง ํ ์ ์์ต๋๋ค.
์ฑ์์ ์์น ์๋น์ค๋ฅผ ํ์ฑํํด์ผํ๋ ๊ฒฝ์ฐ ๋ฉ์์ง ๋๋ ํ ์คํธ๋ฅผ ํ์ํ๋ ค๊ณ ํฉ๋๋ค. ์ํ๊น๊ฒ๋ ์ฌ์ฉ์๊ฐ Google์ ์์น ์๋น์ค API์์ ์์น ์๋น์ค๋ฅผ ์ฌ์ฉ ์ค์งํ๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ Android API๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
๋น์ ์ onCreate
๋ฐฉ๋ฒ์์ :
LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
locationEnabled = false;
Toast.makeText(getActivity(), "Enable location services for accurate data", Toast.LENGTH_SHORT).show();
}
else locationEnabled = true;
๊ทธ๋ฆฌ๊ณ ๋ฉ์๋ locationEnabled
์์ ๋ค์ onConnected
๊ณผ ๊ฐ์ด ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ญ์์ค .
if (location != null) {
Toast.makeText(getActivity(), "Location: " + location.getLatitude() + ", " + location.getLongitude(), Toast.LENGTH_SHORT).show();
}
else if (location == null && locationEnabled) {
locationClient.requestLocationUpdates(locationRequest, this);
}
์ต์ ์ ๋ณด
๋ํ ์์์์ ํ ๋ฒ์ ํด๋ฆญ์ผ๋ก ๋ฌธ์๊ฐ ์ ๋ฐ์ดํธ๋๊ณ LocationClient๊ฐ ์ ๊ฑฐ๋๊ณ API๊ฐ GPS๋ฅผ ํ์ฑํํ๋๋ก ์ง์ํฉ๋๋ค.
task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
// All location settings are satisfied. The client can initialize
// location requests here.
// ...
}
});
task.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
// Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(MainActivity.this,
REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
}
}
}
});
๋งํฌ https://developer.android.com/training/location/change-location-settings#prompt
์๋ก์ด ์์น ํด๋ผ์ด์ธํธ : FusedLocationProviderClient
private FusedLocationProviderClient fusedLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
์์น ์์ ์ ์ํํ๊ธฐ ์ ์ https://developer.android.com/training/location ์ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ด ์ข์ต๋๋ค .
๋ต๋ณ
๋ด ๊ฒฝํ์ โ์ ์ ํ ์ ํ๋โ๊ฐ ๋ ์ข์ ์๋ฏธ๋ ์๋๋๋ค. ๋ด๊ฐ ๋น ์ง ๊ฒ์ด ์๋๋ผ๋ฉด GPS๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด LocationManager๊ฐ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฑ์ผ๋ก ์ฐจ๋์ ์ถ์ ํ๋ฉฐ, ๋๋ฝ ๋ ๋ถ๋ถ์ด์๋ ํ Google Play ์๋น์ค๋ ๋งค์ฐ ๋ถ์ ํ ํ ์์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ต๋ณ
LocationManager ๋์ Google Play ์๋น์ค ์์น API๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด :
Google Play ์๋น์ค ์์น API๋ ์ฑ์ ์์น ์ธ์์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก Android ํ๋ ์ ์ํฌ ์์น API (android.location)๋ณด๋ค ์ ํธ๋ฉ๋๋ค. ํ์ฌ Android ํ๋ ์ ์ํฌ ์์น API๋ฅผ ์ฌ์ฉ์ค์ธ ๊ฒฝ์ฐ ๊ฐ๋ฅํ ๋นจ๋ฆฌ Google Play ์๋น์ค ์์น API๋ก ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ํํด์ผํ๋ ์ด์ ์ ๋ํด Google์ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค.
Google Play ์๋น์ค์ ์ผ๋ถ์ธ Google ์์น ์๋น์ค API๋ ์์น ์ ๊ณต ์ ์ฒด, ์ฌ์ฉ์ ์ด๋ ๋ฐ ์์น ์ ํ๋๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋๋ณด๋ค ๊ฐ๋ ฅํ ๊ณ ๊ธ ํ๋ ์ ์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ํ ์ ๊ณตํ๋ ์ ๋ ฅ ์๋น ๋งค๊ฐ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์น ์ ๋ฐ์ดํธ ์์ฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์์น ์๋น์ค API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐํฐ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋๊ณ ์ ํ๋๊ฐ ํฅ์๋ฉ๋๋ค.
๋ต๋ณ
๊ฝค ์ค๋ซ๋์ Google ์์น ์๋น์ค API๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์์น ๊ฒฐ์ ์์ํ ์ฌ๋ฌ ์์ค๋ฅผ ๊ฐ๋ ๋ณต์ก์ฑ์ ์บก์ํํ๊ธฐ ๋๋ฌธ์ ์ฅ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋๋ฌด ๋ฌด๊ฒ๊ฒ ์บก์ํ ๋์ด ์ด์ํ ์์น๋ฅผ ์ป์ ๋ ๊ทธ ์ด์ํ ์์น๊ฐ ์ด๋์์ ์๋์ง ๊ฒฐ์ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ค์ํ์์ ๋๋ ์ค์ ์์น์์ 10 ํฌ๋ก๋ฏธํฐ ๋จ์ด์ง ๋ช ๊ฐ์ง ๊ดด๋ฌผ ๊ฐ์ด ๋ํ๋ฌ์ต๋๋ค. ์ ์ผํ ์ค๋ช ์ ์ด๋ฌํ ๋ฏธ์น ์์น๋ Google Wi-Fi ๋๋ NWK ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค๋ฅ์์ ๋น๋กฏ๋๋ค๋ ๊ฒ์ ๋๋ค. Wi-Fi ๋ฐ ๋คํธ์ํฌ ํ ํด๋ก์ง๋ ๋งค์ผ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ํญ์ ์กด์ฌํ๋ ์ค๋ฅ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ถํํ๋ (๊ทธ๋ฆฌ๊ณ ๋๋๊ฒ๋) API๋ ๊ฐ๋ณ ์์น๊ฐ ์ด๋ป๊ฒ ๋์ถ๋์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
์๋, ๊ฐ์๋, ๋ฒ ์ด๋ง ๋ฑ์ ํ๋น์ฑ ๊ฒ์ฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ดด๋ฌผ ๊ฐ์ ํํฐ๋ง ํด์ผํ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
โฆ ๋๋ ์ข์ ์ค๋๋ ํ๋ ์ ์ํฌ API๋ก ๋์๊ฐ์ GPS ๋ง ์ฌ์ฉํ์ญ์์ค .Google์ด ์ตํฉ API๋ฅผ ๊ฐ์ ํ ๋๊น์งํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ต๋ณ
Google Play ์๋น์ค์ ์ผ๋ถ์ธ Google ์์น ์๋น์ค API ๋ ์์น ์ ๊ณต ์ ์ฒด , ์ฌ์ฉ์ ์ด๋ ๋ฐ ์์น ์ ํ๋ ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋๋ณด๋ค ๊ฐ๋ ฅํ ๊ณ ๊ธ ํ๋ ์ ์ํฌ๋ฅผ ์ ๊ณต ํฉ๋๋ค . ๋ํ ์ ๊ณตํ๋ ์ ๋ ฅ ์๋น ๋งค๊ฐ ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์น ์ ๋ฐ์ดํธ ์์ฝ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์์น ์๋น์ค API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐํฐ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์ ๋๊ณ ์ ํ๋๊ฐ ํฅ์๋ฉ๋๋ค.
๋ ๊ฐ์ง API Google Play ์๋น์ค ์์น API ์ Android ํ๋ ์ ์ํฌ ์์น API์ ์์ธํ ์ฐจ์ด์ ์ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค .
๋ต๋ณ
์, Google Play ์๋น์ค ์์น ์๋น์ค API๋ ๋งค์ฐ ์๋ชป๋ ์์น ์ ๋ณด๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๋ค. WiFi ๋ชจ๋์ด ์ด๋ํ๊ณ WiFi ๋ชจ๋์ด ์๋ชป๋ ์์น ์ ๋ณด๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค (์ : WiFi ๋ชจ๋์ ์์น๋ฅผ โโ์ ๋ฐ์ดํธํ๋ Android ์ฅ์น์ ์ํด ์์น๊ฐ ์คํธํ ๋ ๊ฒฝ์ฐ) WiFi ๋ชจ๋ ์ผ๊ฐ ์ธก๋์์ ์๋ชป๋ ์์น ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ ์์๋ ๋ค๋ฅธ ์ํฉ์ด ๋ง์ด ์์ต๋๋ค. ์ ํํ ์์น๊ฐ ํ์ ์ธ ๋ชจ๋ ์ฑ์์ GPS ๋ง ์ฌ์ฉํฉ๋๋ค.
๋ต๋ณ
GPS ์๋น์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ๋ ๋ ๊ฐ์ง API Google Play ์๋น์ค ์์น API์ Android ํ๋ ์ ์ํฌ ์์น API์ ์ฐจ์ด์
FusedLocationProviderClient
- ์ฒซ ๋ฒ์งธ ๊ฐ์ ธ ์ค๊ธฐ์ ๊ฒฝ์ฐ ์์น๋ null์ด ์๋์ด์ผํฉ๋๋ค (์ : ์ผ๋ถ ๋ค๋ฅธ ์ฑ์ GoogleplayService ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Lastknown ์์น๋ฅผ ์ ๋ฐ์ดํธํด์ผํฉ๋๋ค. null ์ธ ๊ฒฝ์ฐ ํด๊ฒฐํด์ผ ํจ)
- ๋ค์ ์์ฐจ Fetch์ ๊ฒฝ์ฐ
requestLocationUpdates()
๋ฉ์๋๋ฅผ ์ฌ์ฉ ํ์ฌ ์์น๋ฅผ ํ์นํฉ๋๋ค. - ์์น ๊ฐ์ ธ ์ค๊ธฐ์๋ง ๊ธฐ๋ฐ์ผ๋ก
locationRequest.setInterval(milliseconds)
ํ๊ณsetFastestInterval(milliseconds)
๊ธฐ๋ฐ์ผ๋กํ์ง, ์ฌ์ฉ์ ์์น ๋ณ๊ฒฝ - ๋ฆฌํด ๊ฐ LatLng๋ฅผ ํฌํจ ๊ฐ๋๋ค ๋จ์ง 7 ์ง์ ๊ฐ : (11.9557996, 79.8234599 ์) ์ ํํ์ง ๋ฑ์
- ์ฑ ์๊ตฌ ์ฌํญ์์ ํ์ฌ ์์น ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌด์ํ ์์๋ ์ ํ๋ (50-100 ๋ฏธํฐ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ถ์ฅ
- ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ์ ํจ๊ณผ์ ์ ๋๋ค.
์์น ๊ด๋ฆฌ์ API
- locationManager.requestLocationUpdates ()๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์์น ๊ฐ์ ธ ์ค๊ธฐ๊ฐ ํธ์ถ๋ฉ๋๋ค.
-
์ฌ์ฉ์ ์์น ๋ณ๊ฒฝ ๋ฐ ์๊ฐ ๊ฐ๊ฒฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์น ๊ฐ์ ธ ์ค๊ธฐ
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, milliseconds, mindistance, Mylocationlistener)
-
๋ฐํ ๋ LatLng ๊ฐ์๋ ์์์ ์ดํ 14 ๊ฐ์ ๊ฐ (์ : 11.94574594963342 79.81166719458997)์ด ์์ต๋๋ค.
- ๋ฏธํฐ ๋จ์์ ์ ํ๋๊ฐ ๋ ํ์ํ ์์น ๊ธฐ๋ฐ ์ฑ์ ๊ถ์ฅ ๋ฉ๋๋ค.
- ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋์ ๊ฐ์ ธ ์ค๊ธฐ ๊ฐ๊ฒฉ๊ณผ ๊ฐ์ ธ ์ค๊ธฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋กํฉ๋๋ค.