안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 요즘 다시 안드로이드를 만지고 있는데 gps관련 사항이 궁금하여 질문드립니다.
보통 gps 소스를 보면 메인 액티비티에서 모든 걸 다 구연하길래
메스드 별로 잘라서 메인액티비티 클래스와 서브 클래스로 나누어 작업하던중
onLocationChanged()이거에 따른 갱신이 안되어 질문을 드립니다
main() 클래스 는
package example.Gps2_2;
import java.util.HashMap;
import android.app.Activity; import android.location.LocationManager; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;
public class Gps2_2Activity extends Activity {
//위젯 설정
mTitle = (TextView)findViewById(R.id.pvd);
mStatus = (TextView)findViewById(R.id.status1);
mResult = (TextView)findViewById(R.id.result1);
mEnd = (Button)findViewById(R.id.finish);
//gps 서비스 활성화
mLocMan = gps.getConnect();
//최적의 장치 검색
mTitle.setText("1.최적의 위치 추적장치 : " +gps.bestProvider());
//마지막으로 확인된 위치
HashMap<String,Double> lp = gps.coordinate("l",0);
String lmsg = "";
if(lp.size() > 0){
lmsg = "정보가 없습니다.";
}else{
lmsg = "3 수신횟수:"+ Integer.parseInt(Double.toString(lp.get("mCount"))) +"\n"+
"3_1위도:"+lp.get("latitude")+"\n"+
"3_2경도"+lp.get("longitude")+"\n"+
"3_3고도:"+lp.get("altitude")+"\n";
}
mResult.setText(lmsg);
//버튼 종료
mEnd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish() }
});
}
//액티비티 생성후 출력되는 메소드
public void onResume(){
super.onResume();
mCount=0;
mStatus.setText("현재 위치 상태 확인중 ........................"); HashMap<String, Double> nowMap = gps.coordinate("n",mCount);
String sloc = "3 수신횟수:"+nowMap.get("mCount")+"\n"+
"3_1위도:"+nowMap.get("latitude")+"\n"+
"3_2경도"+nowMap.get("longitude")+"\n"+
"3_3고도:"+nowMap.get("altitude")+"\n";
if(nowMap.get("latitude") > 0){
mStatus.setText("위치확인");
}
mResult.setText(sloc+"\n"+gps.address(nowMap.get("latitude"),nowMap.get("longitude")));
}
}이고
서브 클래스는
package example.Gps2_2;
import java.util.HashMap; import java.util.Iterator;
import android.content.Context; import android.location.Address; import android.location.Criteria; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log;
public class Gps{ LocationManager mLocMan;
HashMap<String,String> gpsData;
String mProvider; //장치
Context context;
/** [Context ] **/
public Gps(Context con){
context = con;
}
/** [Gps Service] **/
public LocationManager getConnect(){
mLocMan = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
return mLocMan;
}
/** [최적의 장치] **/
public String bestProvider(){
mProvider = getConnect().getBestProvider(setCriteria(), true);
return mProvider;
}
/** [setting] **/
public Criteria setCriteria(){
Criteria crt = new Criteria();
crt.setAccuracy(Criteria.ACCURACY_FINE); //정확도
crt.setPowerRequirement(Criteria.POWER_MEDIUM); //베터리 소모량
crt.setAltitudeRequired(true); //고도
crt.setCostAllowed(true);
return crt;
}
/** [마지막으로 확인된 위치] **/
public Location lastPosition(){
Location location = getConnect().getLastKnownLocation(bestProvider());
return location;
}
/** 현재 gps 위치 **/
public Location nowPostion(){
Location location = getConnect().getLastKnownLocation(mProvider);
getConnect().requestLocationUpdates(mProvider, 1000, 1, listener());
return location;
}
public LocationListener listener(){
LocationListener loclistener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
};
return loclistener;
}
/** [경도,위도,고도 출력] **/
public HashMap<String,Double> coordinate(String mode,int cnt){
HashMap<String,Double> map = new HashMap<String,Double>();
Location location = null;
Double latitude = 0.0;
Double longitude = 0.0;
Double altitude = 0.0;
if("l".equals(mode)){
location = lastPosition();
if(location != null){
latitude = location.getLatitude();
longitude = location.getLongitude();
altitude = location.getAltitude();
}
}else{
location = nowPostion();
latitude = location.getLatitude();
longitude = location.getLongitude();
altitude = location.getAltitude();
cnt++;
}
map.put("latitude", latitude); //위도
map.put("longitude",longitude); //경도
map.put("altitude", altitude); //고도
map.put("mCount", Double.parseDouble(Integer.toString(cnt)));
return map;
}
/** [주소 출력]**/
public String address(double latitude, double longitude){
Geocoder coder = new Geocoder(context);
String locInfo ="";
try {
Iterator<Address> address = coder.getFromLocation(latitude, longitude, 3).iterator();
if(address != null){
int nm = 1;
while(address.hasNext()){
Address nameLoc = address.next();
String placeName = nameLoc.getLocality();
String featureName = nameLoc.getFeatureName();
String cuntry = nameLoc.getCountryName();
String road = nameLoc.getThoroughfare();
locInfo += String.format("\n "+nm+"[%s][%s][%s][%s]", placeName,featureName,road,cuntry);
int addIdx = nameLoc.getMaxAddressLineIndex();
for(int idx = 0; idx<=addIdx; idx++){
String addLine = nameLoc.getAddressLine(idx);
locInfo += String.format("\n 주소 %d: %s", idx,addLine);
}
nm++;
}
}
} catch (Exception e) {
Log.d("XXXX", e.getMessage());
}
return locInfo;
}
}입니다.
지속적으로 갱신을 받고 싶은데 전혀 갱신이 안되어 질문 드립니다.
처음 정보를 받고는 지속적 갱신은 안되내요
틀린부분이 있다면 지적좀 해주십시요~~




onLocationChanged에 GPS데이터가 갱신되면 갱신된 좌표가 들어옵니다