안드로이드 마켓 -> 여행 -> 스마트 트랙커
위치정보를 실시간으로 저장하여 지도해 보여주거나 파일로 저장을 제공하는 어플입니다.
네비게이션 GPS 시뮬레이션을 위해서 제작하게 되었는데...
혹시 자신의 필요하신분들이 있지 않을까 해서 올려봤습니다.(광고좀 많이 눌러 주세요 ㅋㅋㅋ)
참고로 파일로 저장하면 loc(로케이션 매니저 데이터 양식-자체정의),
NMEA 표준 규격으로 저장을 시켜 줍니다.
위치정보를 이용한 어플을 만드시는 분들은 이어플을 이용하여 저장한 데이터를 이용하면
따로 밖에 나가지 않고도 테스트가 가능할 것 같네요.
참고로.. 파일 파싱 소스와... 로딩 소스를 올려 드립
public Thread GPSLoggerThread(){
return new Thread() {
public void run() {
BufferedReader bufferReader = null;
StringBuffer stringBuffer = new StringBuffer();
while(true){
// read
// gpsLoggerFile
if(!bGPSLoggerMode || bStopCollecting){
try {Thread.sleep(1000);} catch (InterruptedException e) {;}
continue;
}
FileReader fileReader = null;
try {
fileReader = new FileReader (gpsLoggerFile);
bufferReader = new BufferedReader(fileReader);
if(gpsLoggerFile.endsWith(".nmea")){
gpsLoggerFileType = GPSLOGGER_TYPE_NMEA;
}else if(gpsLoggerFile.endsWith(".loc")){
gpsLoggerFileType = GPSLOGGER_TYPE_LOC;
}
gpsLoggerIndex = 0;
// first line reading
stringBuffer.append(bufferReader.readLine());
// clear buffer
stringBuffer.delete(0, stringBuffer.capacity());
stringBuffer.setLength(0);
while(bufferReader.ready() && bGPSLoggerMode){
stringBuffer.append(bufferReader.readLine());
String rawString = stringBuffer.toString();
if(gpsLoggerFileType == GPSLOGGER_TYPE_NMEA){
NmeaParser currNmeaParser = new NmeaParser();
NmeaParser nextNmeaParser = new NmeaParser();
if(rawString.indexOf(GPRMC, 0) == -1){
// clear buffer
stringBuffer.delete(0, stringBuffer.capacity());
stringBuffer.setLength(0);
continue;
}
nextNmeaParser.parse(rawString);
updateWithNewLocation(nextNmeaParser.getLongitude(), nextNmeaParser.getLatitude()
, nextNmeaParser.getAltitude(), nextNmeaParser.getAccuracy()
, nextNmeaParser.getBearing(), nextNmeaParser.getSpeed()
, nextNmeaParser.getTime());
// clear buffer
stringBuffer.delete(0, stringBuffer.capacity());
stringBuffer.setLength(0);
long gap;
gap = (long)(nextNmeaParser.getTime() - currNmeaParser.getTime())/gpsLoggerSpeedTimes;
if(gap > 3000){
gap = 1000;
}
currNmeaParser.copy(nextNmeaParser);
try {Thread.sleep(gap);} catch (InterruptedException e) {;}
gpsLoggerIndex++;
}else{
LocationParser currLocationParser = new LocationParser();
LocationParser nextLocationParser = new LocationParser();
nextLocationParser.parse(rawString);
updateWithNewLocation(nextLocationParser.getLongitude(), nextLocationParser.getLatitude()
, nextLocationParser.getAltitude(), nextLocationParser.getAccuracy()
, nextLocationParser.getBearing(), nextLocationParser.getSpeed()
, nextLocationParser.getTime());
// clear buffer
stringBuffer.delete(0, stringBuffer.capacity());
stringBuffer.setLength(0);
long gap;
gap = (long)(nextLocationParser.getTime() - currLocationParser.getTime())/gpsLoggerSpeedTimes;
if(gap > 3000){
gap = 1000;
}
currLocationParser.copy(nextLocationParser);
try {Thread.sleep(gap);} catch (InterruptedException e) {;}
gpsLoggerIndex++;
}
}
bufferReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
}




사용자 공간은 앱 소개를 위주로 올려주시고 개발 코드는 지우시고 필요하시다면 개발자 공간에 올려주세요. 개발코드가 계속 남아있으면 본 글은 개발자 공간으로 이동합니다.