안녕하세요? 딱친구 입니다.
카페 내에서 많은 도움을 받아 현재 타겟보드(MV6410)에
구글맵 관련 어플을 작성하여 맵을 띄우기 까지는 성공 하였습니다.
전체적인 화면 디스플레이 구조는 화면 윗쪽에
현재 위치를 위도/경도/주소등의 데이터를 텍스트로 표시를 해주고,
그 아래로 맵 이미지가 표시 되도록 되어 있는 구조인데... (아래그림참고)
현재 위치의 위도 / 경도 부분은 데이터를 잘 읽어와 표시를 하고 있지만,
주소 데이터는 표시를 못해주고 있습니다.
관련 소스는 아래와 같이 하여 동작 시켰구요...
에뮬레이터에서는 주소 데이터 잘 읽어 오고 있는데
타겟 보드에서는 관련 부분이 빠져 아예 동작을 하지 않는 것 같습니다.
구글맵 관련 framework의 jar 파일이나 permissions의 xml 파일이 빠진것 처럼 말이죠...
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
.
.
.
Geocoder gc = new Geocoder(this,Locale.getDefault());
try
{
List<Address> addresses = gc.getFromLocation(latitude, longitude, 1);
StringBuilder sb = new StringBuilder();
if (addresses.size() > 0)
{
Address address = addresses.get(0);
for (int i=0;i < address.getMaxAddressLineIndex();i++)
{
sb.append(address.getAddressLine(i)).append(", ");
}
sb.append(address.getLocality()).append(",\n");
sb.append(address.getCountryName()).append(" [우.");
sb.append(address.getPostalCode()).append("] ");
addressString = sb.toString();
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
.
.
.
myLocationText.setText("당신의 현재 위치는 \n" + latlongString + "이고 \n\n" +
"주소는 \n" + addressString + "입니다");
소스는 위와 같고 위의 소스에서 붉은색으로 표시한 부분들이
실제 타겟보드에는 빠져 있어 아예 동작하지 않는 것이 아닌가 추측만 할 뿐입니다.
혹시 타겟보드에서 주소 데이터를 출력 해 주는 방법에 대해서
알고 게신 회원분이 계시면 도움좀 부탁 드리겠습니다.
logcat을 보아도 에뮬레이터에서는 관련 부분이
08-05 15:57:09.867: DEBUG/WhereAmIDEMO(1057): [updateWithNewLocation] location = Location[mProvider=gps,mTime=1249419430000,mLatitude=35.895673,mLongitude=128.613789,mHasAltitude=true,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0,mHasAccuracy=false,mAccuracy=0.0,mExtras=Bundle[mParcelledData.dataSize=52]]
08-05 15:57:09.867: DEBUG/WhereAmIDEMO(1057): mDisplayCount = 2
08-05 15:57:10.266: DEBUG/dalvikvm(1057): GC freed 1909 objects / 264312 bytes in 228ms
08-05 15:57:10.777: DEBUG/LocationMasfClient(570): getAddressFromProtoBuf(): Ignore feature 9,410-21
08-05 15:57:10.787: DEBUG/LocationMasfClient(570): getAddressFromProtoBuf(): Ignore feature 6,Buk-gu
08-05 15:57:11.026: DEBUG/dalvikvm(1057): GC freed 752 objects / 116432 bytes in 94ms
08-05 15:57:11.108: DEBUG/M2LabDEMO(1057): [draw] M2LabDEMO.bGPSdataAutoMode = true
08-05 15:57:11.108: DEBUG/M2LabDEMO(1057): [draw] M2LabDEMO.mDisplayCount = 2
08-05 15:57:11.116: DEBUG/M2LabDEMO(1057): [draw] latitude = 3.589536899999999E7
08-05 15:57:11.127: DEBUG/M2LabDEMO(1057): [draw] longitude = 1.28614261E8
위의 파란색 부분과 같이 로그가 보이지만,
실제 타겟 보드에서는
D/WhereAmIDEMO( 1880): [updateWithNewLocation] location = Location[mProvider=gps,mTime=1248862241000,mLatitude=35.89223333333334,mLongitude=128.61644166666667,mHasAltitude=true,mAltitude=91.7,mHasSpeed=true,mSpeed=0.0,mHasBearing=true,mBearing=0.0,mHasAccuracy=false,mAccuracy=0.0,mExtras=null]
D/WhereAmIDEMO( 1880): mDisplayCount = 0
D/GpsLocationProvider( 1688): setMinTime 2000
D/gps_fr ( 1688): gps status callback: 0x1
D/gps_fr ( 1688): gps entered timer thread
W/IInputConnectionWrapper( 1745): showStatusIcon on inactive InputConnection
D/dalvikvm( 1880): GC freed 4170 objects / 276512 bytes in 80ms
D/dalvikvm( 1880): GC freed 8156 objects / 598592 bytes in 81ms
D/M2LabDEMO( 1880): [draw] M2LabDEMO.bGPSdataAutoMode = true
D/M2LabDEMO( 1880): [draw] M2LabDEMO.mDisplayCount = 0
D/M2LabDEMO( 1880): [draw] latitude = 3.5892353E7
D/M2LabDEMO( 1880): [draw] longitude = 1.28614991E8
I/ActivityManager( 1688): Displayed activity com.android.m2labdemo/.M2LabDEMO: 1729 ms
와 같이 mDisplayCount 값 이후에 주소에 대한 관련 정보가 찍히질 않고 있습니다.
혹시 import android.location.Geocoder;
가 포함되어 있는 라이브러리 파일이 무엇인지 만이라도 알고 계신 분이 계시면 답변 부탁 드리겠습니다.
그럼 남은하루 즐겁게 보내시구요...
수고하세요...
감사합니다.
일단 결론 부터 말씀 드리자면 타겟보드에서 Geocoder를 사용하여 주소 데이터를 출력 하는데 실패 하였습니다.
테스트 방법은 에뮬레이터에는 존재하지만 타겟보드에는 존재하지 않는 apk(system/app)를 타겟보드에
하나하나 추가하여 테스트 하였지만 주소데이터는 가져 오지 못하더 군요...
가장 의심 가는 apk가 "NetworkLocation.apk" 요넘 이였는데...
이넘을 추가 하여도 결과는 마찬 가지더 군요...
한가지 확인 못한 사항이 있지만... 현재로선 제 타겟보드 환경에서 더이상 테스트 할 수 있는 방법이 없어서요...
아직 확인을 하지 못하고 있습니다.
에뮬레이터에서 Geocoder 를 사용하여 주소를 가져오는 어플 사용시
"/data/system/location" 폴더에 파일이 두개가 생성이 되는데...
그중 하나는 에뮬레이터나 타겟보드나 동일하게 존재 하지만,
나머지 하나는 존재하지 않더라구요...
아무래도 주소 데이터를 가져오기 위한 Key 값이 저장된 파일 인 것으로 생각 되어 집니다.
위의 언급한 폴더에 생성된 파일은 "gls.platform.key 와 location.gps" 두개의 파일 입니다.
이 두개의 파일 중에서 "location.gps" 파일은 에뮬레이터와 타겟보드에 모두 존재 하지만,
"gls.platform.key" 파일은 에뮬레이터에만 존재 하더라구요...
혹시 이 파일이 어떤 역활을 하고 있는지 알고 계시면 답변좀 부탁 드리겠습니다.
그럼 수고하세요....
감사합니다.