2012-07-11 83 views
0

我遇到問題。當我測試這個。我要求showCurrentLocation函數它總是返回null。當我發送位置後,它在模擬器中工作。但是我需要這個在電話上工作,並且你不能在DDNS窗口中發送位置。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(); 
    } 

} 

} 

我的權限是:FINE_LOCATION COURSE_LOCATION。

我真的只是想它,它跟蹤用戶的位置,甚至在背景..

+0

您是否爲清單輸入了必需的權限? – Egor 2012-07-11 08:46:26

+0

你可以嘗試重新啓動你的Wi-Fi連接嗎? – 2012-07-11 08:55:39

+0

哦對不起,必須包括這一點。我有COURSE_LOCATION,FINE_LOCATION ..和一個用於電話號碼 – 2012-07-11 08:56:30

回答

0

您可以發送模擬地點也到你的Android設備看到 Android mock location on device?

然後除此之外我有這個問題它似乎也許從來沒有在你的設備之前的位置嘗試打開谷歌地圖,並確保你找到,然後再試一次。此外,我懷疑是因爲您第一次使用應用程序時無法訪問上次已知的位置,因爲您從未使用它,因此您首先需要找到位置,然後在下次啓動該應用程序時它將起作用。如果你想要一個快速的位置嘗試通過WiFi或手機塔找到

並確保權限設置!

+0

我試圖在谷歌地圖中找到它。但仍showCurrentLocation給null ..我真的不知道我做錯了什麼。我只是需要它的應用程序提供當前的位置,即使它在後臺 – 2012-07-11 09:02:58

+0

您是否在谷歌地圖中獲得位置?如果不是,你確定你的設置是正確的嗎?上面的圖標應該顯示,直到你在谷歌地圖中有一個位置,所以確保它在那裏工作,然後看看你是否在你自己的應用程序中獲得相同的行爲。就像我上面提到的那樣,似乎上次知道的位置是空的,因爲它第一次使用應用程序,所以它還不知道,您應該首先嚐試正常地獲取位置更新。 – QVDev 2012-07-11 09:10:37

+0

是的,位置非常好。我在gps上做這個。和WIFI?那是問題嗎?我在三星Galaxy SII上測試過它 – 2012-07-11 09:12:08

0

您是否檢查過您的手機中打開了GPS,打開GPS後需要一段時間才能獲取位置更新。

+0

是的,我檢查了。小圖標會打開和關閉(手機頂部的gps圖標) – 2012-07-11 09:00:15

+0

好的,如果圖標開啓和關閉意味着您不會獲得位置更新。它應該在幾分鐘後,只有你會得到位置更新。 – 2012-07-11 09:02:20

+0

當圖標閃爍時,表示它試圖獲取當前位置,不是嗎? – 2012-07-11 09:04:09