안녕하세요.
현재위치를 가져와서 구글맵에 마커찍는 화면을 개발하고 있습니다.
onCreate 에서 아래 처럼 구현해놓고
if(mLocationManager == null)
{
mLocationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
mGPSLocationListener = new GPSLocationListener();
mNetWorkLocationListener = new NetWorkLocationListener();
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000, 0, mGPSLocationListener);
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000, 0, mNetWorkLocationListener);
}
각각의 GPSLocationListener, NetWorkLocationListener 를 구현했습니다.
public class GPSLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if(location!=null)
{
mLastGPSLocationTime=System.currentTimeMillis();
isGPSReceive=true;
mapDisplay(location);
Toast.makeText(getBaseContext(), "GPS발생 : "+location.getLatitude()+" / "+location.getLongitude(), Toast.LENGTH_SHORT).show();
Logging.d("GPS발생 : "+getSystemDateNTime()+location.getLatitude()+" / "+location.getLongitude());
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
if(provider == LocationManager.GPS_PROVIDER)
{
isGPSReceive=false;
}
}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
//network리스너를 재정의한 class
public class NetWorkLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if(location!=null)
{
mapDisplay(location);
Toast.makeText(getBaseContext(), "GPS 20초이상 NPS발생 : "+location.getLatitude()+" / "+location.getLongitude(), Toast.LENGTH_SHORT).show();
Logging.d("GPS 20초이상 NPS발생 : "+getSystemDateNTime()+location.getLatitude()+" / "+location.getLongitude());
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
private void mapDisplay(Location location){
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Logging.d(":::::::: "+latitude+" / "+longitude+":::::::: ");
MYLOC = new LatLng(latitude, longitude);
Map.animateCamera(CameraUpdateFactory.newLatLngZoom(MYLOC, 15));
}
그럼 제가 궁금한건..
@Override
public void onMyLocationChange(Location location) {
Logging.d("onMyLocationChange : "+location.getLatitude()+" / "+location.getLongitude());
// 여기에 각각의 GPS리스너와 Network리스너에서 구해진 location 이 들어오는게 맞는건가요????
}
무조건 현재위치를 가져와서 GPS/네트워크 둘다 구하긴 했는데...
로그 찍어보니 onMyLocationChange 함수가 5초마다 호출되고 있더라구요,,,,
근데 GPS/Network 리스너는 20초마다 호출되고 있고....뭐가 먼지 모르겟네요 ㅠㅠ
조언좀 부탁드릴께요,,,
수고하세요~