안드로이드 실시간 경도,위도 지속적 갱신
조회수 5729회
안드로이드 gps질문 하나만 하겠습니다.
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, MIN_DISTANCE_UPDATE, this);
이 코드를 사용하여 1초 or 10m거리 변화가 있을 시
public void onLocationChanged(Location location)
이 코드가 실행된다고 구글링을 하여 알아보았습니다. 직접 핸드폰으로 실행을 해보니 몇번 반응을 하고 더 이상 실행을 하지 않는 것 같더라구요.
제가 원하는 것은 일정시간,거리마다 public void onLocationChanged(Location location)
을 불러오고 싶은데 잘 안됩니다.
참고로 flyGPS를 설치하여 인위적으로 이동하였을때는 onLocationChanged 메소드가 잘 반응 하고 있는것 같습니다.
도움이 절실합니다. 소스 첨부하겠습니다.
(앱을 켜놓은 상태에서 일정시간이 지나면 Toast메세지가 나오도록 하고싶습니다.)
제가 잘못 이해하고 있는 부분이 있으면 지적해주세요!
public class GPS extends Service implements LocationListener {
private final Context mContext;
int count = 0;
boolean isGPSEnable = false;
boolean isNetWorkEnable = false;
boolean isGetLocation = false;
Location location;
double lat;
double lon;
private static final long MIN_DISTANCE_UPDATE = 10;
private static final long MIN_TIME_UPDATE = 1000 * 10 * 1;
protected LocationManager locationManager;
public GPS(Context mContext) {
this.mContext = mContext;
getLocation();
}
@SuppressLint("MissingPermission")
public Location getLocation() {
try {
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
isGPSEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetWorkEnable = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnable && !isNetWorkEnable) {
} else {
this.isGetLocation = true;
if (isNetWorkEnable) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, MIN_DISTANCE_UPDATE, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
lat = location.getLatitude();
lon = location.getLongitude();
}
}
}
if (isGPSEnable) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, MIN_DISTANCE_UPDATE, this);
if (location == null) {
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
lat = location.getLatitude();
lon = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
public double getLatitude() {
if (location != null)
lat = location.getLatitude();
return lat;
}
public double getLongitude() {
if (location != null)
lon = location.getLongitude();
return lon;
}
public boolean isGetLocation() {
return this.isGetLocation;
}
public void stopUsingGPS() {
if (locationManager != null)
locationManager.removeUpdates(GPS.this);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onLocationChanged(Location location) {
Toast toast = Toast.makeText(mContext, Integer.toString(count), Toast.LENGTH_SHORT);
toast.show();
count++;
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// Toast toast = Toast.makeText(mContext, "2", Toast.LENGTH_SHORT);
// toast.show();
}
@Override
public void onProviderEnabled(String provider) {
// Toast toast = Toast.makeText(mContext, "3", Toast.LENGTH_LONG);
// toast.show();
}
@Override
public void onProviderDisabled(String provider) {
// Toast toast = Toast.makeText(mContext, "4", Toast.LENGTH_LONG);
// toast.show();
}
}
1 답변
-
자답입니다.
locationManager.requestLocationUpdates 메소드는
일정시간 or 일정거리가 아니라 일정시간 and 일정거리 두개의 조건을 모두 만족하였을 경우 실행되는 메소드 였습니다!
댓글 입력