簡體   English   中英

地理位置無法在android中使用

[英]geolocation does not work in android

我有一個問題,我想將googleMap與地理定位一起使用。 我在使用Google地圖時沒有問題,只是,地理定位未運行,並且經度和緯度的值為null

public void geolocalisation() {
    lmanager  = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000l, 10l, new LocationListener(){
            public void onLocationChanged(Location arg0) {
                 latitude = arg0.getLatitude();
                 longitude = arg0.getLongitude();
            } 
            public void onProviderDisabled(String arg0) {} 
            public void onProviderEnabled(String arg0) {} 
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
        });
    GeoPoint position = new GeoPoint(microdegrees(longitude),microdegrees(latitude));

    MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.personne));//localisation point marker

    marker.addPoint(position);
    maMap.getOverlays().add(marker);
    monControler = this.maMap.getController();

}

這是androidManifest中的權限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS"/>

我不知道這是什么問題?

我懷疑問題可能是您對requestLocationUpdates的調用中的第二和第三參數。 他們說最多每秒鍾發送一次位置更新,並且僅當位置變化超過10米時才發送。 對於大多數情況,坐在您的開發機器上,在調試中運行並查看logcat的情況下,以每秒10米的速度移動似乎不太可能。

從API文檔:

可以使用minTime和minDistance參數控制通知的頻率。 如果minTime大於0,則LocationManager可能會在兩次位置更新之間休息minTime毫秒,以節省電量。 如果minDistance大於0,則僅當設備移動minDistance米時,才會廣播位置。 要盡可能頻繁地獲取通知,請將兩個參數都設置為0。

另外,我認為您希望將以下幾行移至onLocationChanged處理函數中,否則它們將僅被調用一次,而不是每次更新都被調用;

GeoPoint position = new GeoPoint(microdegrees(latitude),microdegrees(longitude));

    MonOverlay marker = new MonOverlay(getResources().getDrawable(R.drawable.personne));//localisation point marker

    marker.addPoint(position);
    maMap.getOverlays().add(marker);

位置更改時,將異步調用您的代碼,例如,位置更改時,將調用onLocationChanged()方法。

因此,您應該將位置更新的所有邏輯都放在此方法中。

對於代碼的第一次運行(位置隨時間變化,但是您需要立即在地圖上顯示位置),應使用lmanager.getLastKnownLocation()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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