안녕하세요 요즘 다시 안드로이드를 만지고 있는데 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;
    }
 
}

입니다.

 

지속적으로 갱신을 받고 싶은데 전혀 갱신이 안되어 질문 드립니다.

처음 정보를 받고는 지속적 갱신은 안되내요

 

틀린부분이 있다면 지적좀 해주십시요~~