簡體   English   中英

位置並不總是出現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM