2012-07-11 3 views
0

문제가 있습니다. 내가 이것을 시험 할 때. 그리고 항상 null을 반환하는 showCurrentLocation 함수를 요청합니다. 그것은 후에 에뮬레이터에서 위치를 보낼 때 작동합니다. 하지만 전화로 작업해야하는데 DDNS 창과 같이 위치를 보낼 수 없습니다. FINE_LOCATION의 COURSE_LOCATION :LocationManager getLastKnownLocation always null

여기

public class LbsGeocodingActivity extends Activity { 

private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters 
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1; // in Milliseconds 

protected LocationManager locationManager; 

protected Button retrieveLocationButton; 
protected Button stopLocationButton; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    retrieveLocationButton = (Button) findViewById(R.id.retrieve_location_button); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    locationManager.requestLocationUpdates(
      LocationManager.GPS_PROVIDER, 
      MINIMUM_TIME_BETWEEN_UPDATES, 
      MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, 
      new MyLocationListener() 
    ); 

    retrieveLocationButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showCurrentLocation(); 
     } 
    }); 
    /*stopLocationButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //locationManager.removeUpdates(MyLocationListener) ;   
     } 
    }); */ 

}  

public String getMyPhoneNumber(){ 
    TelephonyManager mTelephonyMgr; 
    mTelephonyMgr = (TelephonyManager) 
    getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number(); 
} 

protected void showCurrentLocation() { 

    Criteria crit = new Criteria(); 
    crit.setAccuracy(Criteria.ACCURACY_FINE); 
    String provider = locationManager.getBestProvider(crit, true); 
    Location loc = locationManager.getLastKnownLocation(provider); 


    if (loc != null) { 
     String longi = "" + loc.getLongitude(); 
     String lat = "" + loc.getLatitude(); 
     String num = getMyPhoneNumber(); 
     String message = String.format(
       "Current Location \n Longitude: %1$s \n Latitude: %2$s \n %3$s ", 
       longi, 
       lat, 
       num  ); 
     Toast.makeText(LbsGeocodingActivity.this, message, 
       Toast.LENGTH_LONG).show(); 
    } 
    if (loc == null)Toast.makeText(LbsGeocodingActivity.this, "Null ", 
      Toast.LENGTH_LONG).show(); 
} 

private class MyLocationListener implements LocationListener { 



    public void onLocationChanged(Location loc) { 
     String longi = "" + loc.getLongitude(); 
     String lat = "" + loc.getLatitude(); 
     String num = getMyPhoneNumber(); 
     String message = String.format(
       "New Location \n Longitude: %1$s \n Latitude: %2$s \n %3$s ", 
       longi, 
       lat, 
       num    ); 
     Toast.makeText(LbsGeocodingActivity.this, message, Toast.LENGTH_LONG).show(); 
    } 

    public void onStatusChanged(String s, int i, Bundle b) { 
     Toast.makeText(LbsGeocodingActivity.this, "Provider status changed", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderDisabled(String s) { 
     Toast.makeText(LbsGeocodingActivity.this, 
       "Provider disabled by the user. GPS turned off", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onProviderEnabled(String s) { 
     Toast.makeText(LbsGeocodingActivity.this, 
       "Provider enabled by the user. GPS turned on", 
       Toast.LENGTH_LONG).show(); 
    } 

} 

} 

내 권한은 내 코드입니다. 당신은 당신의 안드로이드 장치에 또한 모의 위치를 ​​보낼 수

+0

매니페스트에 필요한 권한을 입력 했습니까? – Egor

+0

Wi-Fi 연결을 다시 시작할 수 있습니까? –

+0

아, 죄송합니다. 포함시켜야합니다. 나는 COURSE_LOCATION, FINE_LOCATION ..과 전화 번호는 –

답변

0

그것도 배경에, 사용자의 위치를 ​​추적하는 것이 내가 정말 원하는

이 .. Android mock location on device?

를 참조

그런 다음 그 외에 나는이 문제를 가지고 있었다 기기에 이전에 위치 정보가 없었던 것 같습니다. Google지도를 열어 위치를 확인한 다음 다시 시도하십시오. 또한 당신이 응용 프로그램을 처음 사용했을 때 처음 사용했을 때와 같은 것을 의심했습니다. 아직 사용하지 않았기 때문에 마지막으로 알고있는 위치에 대한 액세스 권한이 없습니다. 그래서 먼저 응용 프로그램을 시작해야하고 다음 번에 응용 프로그램을 시작해야합니다. 빠른 위치를 원할 경우 와이파이 또는 셀 타워로 위치를 찾으십시오

그리고 권한이 설정되어 있는지 확인하십시오!

+0

입니다. Google지도에서 찾으려고했습니다. 하지만 여전히 showCurrentLocation은 null을 제공합니다. 내가 뭘 잘못하고 있는지 전혀 알지 못합니다. 앱이 배경에있을 때에도 앱이 현재 위치를 알려주는 것이 필요합니다. –

+0

Google지도에 위치 정보가 있습니까? 그렇지 않다면 전화 설정이 바뀌 었습니까? 위의 아이콘은 Google지도에 위치가 표시 될 때까지 표시되어야하므로 해당 위치에서 작동하는지 확인한 다음 자신의 응용 프로그램에서 동일한 동작을하는지 확인하십시오. 앞서 언급 한 것처럼 마지막으로 위치가 null 인 것은 처음으로 응용 프로그램을 사용하고 있으므로 처음에는 알 수 없으므로 먼저 위치 업데이트를 정상적인 방법으로 시도해야합니다. – QVDev

+0

예, 위치는 완벽합니다. 나는 GPS로이 작업을 수행한다. 그리고 와이파이 는요? 그게 문제 야? 나는 삼성 갤럭시 SII –

0

휴대 전화에서 GPS가 켜져 있는지 확인 했습니까? GPS를 켜면 위치 업데이트를받는 데 약간의 시간이 걸립니다.

+0

예. 확인했습니다. 작은 아이콘이 계속 켜지고 꺼집니다 (휴대 전화의 상단에있는 GPS 아이콘). –

+0

아이콘이 켜졌다 꺼졌다 켜졌다면 위치 업데이트를받지 못할 수도 있습니다. 몇 분만 지나면 위치 정보가 업데이트됩니다. –

+0

아이콘이 깜박이면 현재 위치를 얻으려고한다는 뜻입니까? 아닙니다. –

관련 문제