[英]Location not always appearing
我正在嘗試通過LocationManager.NETWORK_PROVIDER獲取用戶的位置,但是它總是返回一個空字符串。 只有有時候我才能獲得有效數據。 有什么辦法可以讓該方法重新出現,直到它給我一個位置? 我認為該位置很快就會出現,因此不需要這種方法。 我試過重新調用它,直到它不顯示空字符串,但沒有任何反應。
這是我調用的方法
public String getLocation(Locale locale, Context context, boolean city, boolean postal, boolean state_prov) throws IOException{
LocationManager locMan = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
LocationListener locList = new MyLocList();
Geocoder gC = new Geocoder(context,locale);
Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);
locMan.requestLocationUpdates(locMan.NETWORK_PROVIDER, 500, 200, locList);
Location networkLocation = locMan.getLastKnownLocation(locMan.NETWORK_PROVIDER);
if (city)
return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getSubAdminArea());
else if (postal)
return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getPostalCode());
else if (state_prov)
return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getAdminArea());
else
return "Nothing";
}
我通常會要求提供城市或郵政編碼,但大多數情況下都是空的。 使用
Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);
結果為NullPointer,所以我正在使用NETWORK_PROVIDER
我設置了以下權限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
這就是我所說的
String data = getLocation(Locale.getDefault(),getBaseContext(),true,false,false);
我繼續得到一個空字符串作為結果。
我曾問過一個關於不接收城市的問題,但是現在看來沒有數據在傳,如果不是的話,它的數據也無法持續獲得。
在您的代碼中,您要的是“最后知道的位置”,而不是“當前位置”。 其他一些應用程序之前曾詢問過位置,您得到的結果與該應用程序相同。 如果在啟動您的應用程序之前沒有位置請求,則“最后一個已知位置”將為空。
正確的方法是注冊偵聽器,然后等待位置更新到達。 然后將結果存儲為“最后已知位置”。
這個答案應該對您有所幫助: 在Android中獲取用戶當前位置的最簡單,最可靠的方法是什么?
編輯:為了澄清,這是上面鏈接中提到的MyLocation類的正確用法。 您無法立即獲得位置,而是將代碼放在回調方法中,並且當位置數據可用時,它將被調用。
LocationResult locationResult = new LocationResult(){
@Override
public void gotLocation(Location location){
//Got the location!
//Here goes your code
//This method will be called when location data arrive
}
};
MyLocation myLocation = new MyLocation();
myLocation.getLocation(this, locationResult);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.