2011-09-07 3 views
0

오늘 일찍이 만들었지 만 작동하지 않습니다. 위치 관리자는 null을 반환하며 리스너를 구현했습니다. 문제에 대한 아이디어. 감사.LocationManager가 대상을 반환하지 않습니다.

편집 : 나는이 줄 위치가 null의 경우

Location location = locationManager.getLastKnownLocation(provider); 

는 기본적으로, 그것은 아래의 경우 문장의 다른 부분으로 이동합니다 문제라고 생각합니다. 코드를 컴파일 할 때마다 위치가 업데이트되지 않는다는 것을 의미하는 else 문으로 넘어갑니다. 내 첫번째 추측은 당신이 명령 줄을 통해 또는 일식 DDMS의 perpective를 사용하여 위치 수정 프로그램을 제공하지 않는 것입니다

public class Activity1 extends Activity implements LocationListener { 
/** Called when the activity is first created. */ 
JoshTwoActivity main; 
Activity2 two; 
boolean checkTick = false; 
String locationplace = ""; 
private LocationManager locationManager; 
private String provider; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    Criteria criteria = new Criteria(); 
    provider = locationManager.getBestProvider(criteria, false); 
    System.out.println(provider); 
    System.out.println(locationManager.getProviders(criteria, false)); 
    System.out.println(locationManager.getProvider("network")); 
    System.out.println(locationManager.getAllProviders()); 

    Location location = locationManager.getLastKnownLocation(provider); 
    System.out.println(locationManager.isProviderEnabled(provider)); 

    // Initialize the location fields 
    if (location != null) { 
     System.out.println("Provider " + provider + " has been selected."); 
     int lat = (int) (location.getLatitude()); 
     int lng = (int) (location.getLongitude()); 
     System.out.println(String.valueOf(lat)); 
     System.out.println(String.valueOf(lng)); 

    } else { 
     System.out.println("Provider not available"); 
     System.out.println("Provider not available"); 
    } 

} 


/* Request updates at startup */ 
@Override 
protected void onResume() { 
    super.onResume(); 
    locationManager.requestLocationUpdates(provider, 400, 1, this); 
} 

/* Remove the locationlistener updates when Activity is paused */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
public void onLocationChanged(Location location) { 
    int lat = (int) (location.getLatitude()); 
    int lng = (int) (location.getLongitude()); 
    System.out.println(String.valueOf(lat)); 
    System.out.println(String.valueOf(lng)); 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    Toast.makeText(this, "Enabled new provider " + provider, 
      Toast.LENGTH_SHORT).show(); 

} 

@Override 
public void onProviderDisabled(String provider) { 
    Toast.makeText(this, "Disenabled provider " + provider, 
      Toast.LENGTH_SHORT).show(); 
} 

}

+0

사용하시는 제공 업체는 무엇입니까? –

+0

provider = locationManager.getBestProvider (criteria, false); 에뮬레이터에서 –

+0

을 테스트하고 있습니다. –

답변

0

좋아. 문제가 발생하면 DDMS perpecive를 열고 원하는 위도와 경도를주고 보내십시오. 그래서 문제가 발생하면 location은 null이되지 않습니다.

+0

문제가 있지만 응용 프로그램을 게시하려면 DDMS를 사용할 수 없습니다. 나는 당신이 말했듯이 그것을 넣었고 아직 널을 가지고있다. –

+0

물론 실제 장치에는 DDMS가 없으므로 DDMS가 해당 프로세스를 시뮬레이션합니다. 앞서 에뮬레이터가 실행될 때 위치 정보 수정 원인을 알려주지 않았다고 말한 것처럼 DDMS를 통해 해당 프로세스를 수행하면 위치 정보가 연결되지 않으므로 마지막 위치 정보를 얻을 수 있으므로 위치 객체가 null이 아니어야합니다. –

+0

오른쪽. 나는 지금 그것을 시도 할 것이다. –

1

getLastKnownLocation()는 공급자에 대한 마지막으로 알려진 위치 수정과 위치를 반환합니다. 프로 바이더가 null를 돌려주는 경우, 프로 바이더에는 로케이션 픽스가 한 번도 존재하지 않습니다. 공급자가 제공되지 않는다는 의미는 아닙니다.

일단 getLastKnownLocation()을 호출하면 결과가 사용자의 목적에 부합하는지 여부를 확인해야합니다. 그렇지 않으면 requestLocationUpdates()를 사용하여 위치 업데이트를 요청해야합니다.

이 블로그 게시물에는 위치 공급자를 사용하여 코드를 작성하는 방법에 대해 알아야 할 모든 것이 있습니다. http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

관련 문제