2011-01-25 164 views
1

我正在使用位置偵聽器來獲取我的android應用程序的long long & lat。位置監聽器

我用下面的代碼工作:

public Location getLastKnownLocation() 
{ 
Location location=null; 
try 
{ 
// Get the location manager 
mLocMgr = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE); 
// List all providers: 
// List<String> providers = mLocMgr.getAllProviders(); 

Criteria criteria = new Criteria(); 
bestProvider = mLocMgr.getBestProvider(criteria, false); 
location = mLocMgr.getLastKnownLocation(bestProvider); 
if(location==null) 
{ 
    Thread.sleep(5000); 
    location=mLocMgr.getLastKnownLocation(bestProvider); 
} 
} 
catch(Exception e) 
{ 
    Log.i("program", e.getMessage()); 
} 
return location; 
} 

public Location updateCurrentLocation() 
{ 
Location mLoc=null; 
try 
{ 
mLoc=getLastKnownLocation(); 
mlocListener = new LocListener(); 
mLocMgr.requestLocationUpdates(bestProvider, 0, 0, mlocListener); 
mLoc=getLastKnownLocation(); 
} 
catch(Exception e) 
{ 
    Log.e("program", e.getMessage()); 
} 
return mLoc; 
} 

據工作精絕。但是,當我們關閉設備並重新啓動時遇到了問題。然後我得到的位置爲空。 但是,在啓動google地圖後,它會重新開始工作。 因此,請你們幫我解決這個問題,因爲我不想在開始我的應用程序之前啓動Google地圖。感謝您的支持!

回答

3

當您關閉並打開設備電源時,您的getLastKnownLocation方法可能會失敗。

而且,我看到的是,你在呼喚它,你訂閱的位置更新利斯特前:

mLoc=getLastKnownLocation(); //<<<<<<<<<<<<< 
mlocListener = new LocListener(); 
mLocMgr.requestLocationUpdates(bestProvider, 0, 0, mlocListener); 

爲什麼你需要調用getLastKnownLocation()?當您啓動設備時它不會立即工作。

當您使用Google地圖時,它正在優雅地嘗試收聽位置更新。而且,一旦它獲得至少一個位置更新,那麼你的getLastKnownLocation將開始工作。

我看到你的架構需要重新思考(如果你的方法名是合適的)

這應該只進行一次調用,在一些適當的位置,當你的應用程序發起。

mLocMgr.requestLocationUpdates(bestProvider, 0, 0, mlocListener); 

然後,你需要的任何更新的onLocationChanged(Location location)

+0

太棒了..它幫助了我。謝謝 – Pankaj 2011-01-27 10:26:14