簡體   English   中英

如何在Android中使用GPS_PROVIDER獲取當前准確的GPS坐標?

[英]How to get the current accurate GPS Coordinates using GPS_PROVIDER in android?

我正在開發一個基於GPS位置導航的Android應用程序,用於查找用戶當前位置。 我正在使用GPS_PROVIDER我不想使用任何其他提供程序,如PASSIVE_PROVIDER或NETWORK_PROVIDER,目前我的代碼正常工作,它准確地給了我坐標但是當我從應用程序退出並再次啟動應用程序時,它給了我與舊的坐標略有不同的坐標我在同一個地方和同一個位置。
為了找到GPS坐標,我使用了以下代碼。

LocationManager mlocManager = (LocationManager) 
        getSystemService(Context.LOCATION_SERVICE);
MyLocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, mlocListener);

我的聽眾課是

public class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location loc) {
        loc.getLatitude();
        loc.getLongitude();
        String Text = "My current location is: " + "Latitud = "
            + loc.getLatitude() + "Longitud = " + loc.getLongitude();
        TextView txtgps = (TextView) findViewById(R.id.text_GPS_Coordinates);
        txtgps.setText(Text);
        Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT)
                .show();
    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(getApplicationContext(), "Disable",
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(getApplicationContext(), "Enable",
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

我在AndroidManifest中定義權限是:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

請告訴我給出准確可靠坐標的方法,如果可能的話,請解釋一下你的代碼。

您可能希望最新的位置修復最准確。 但是,由於定位的准確性不同,最近的修復並不總是最好的。 您應該包含基於多個條件選擇位置修復的邏輯。 標准也根據應用和現場測試的使用情況而有所不同。

您可以采取以下幾個步驟來驗證位置修復的准確性:

  • 檢查檢索到的位置是否明顯高於先前的估計值。
  • 檢查該位置聲明的准確度是否優於或低於先前的估計值。
  • 檢查新位置來自哪個提供商,並確定您是否更信任它。

除此之外,您的GPS可能會為您提供wifi或塔的最后緩存位置。 這是一個已知的錯誤,為了解決這個問題,您可以編寫自定義算法來忽略它。

您用於獲取位置的方法始終准確。 即使您的位置發生了一些變化,它也會顯示出不同的坐標。

假設您只想獲得一個坐標(也就是說,當您第一次打開您的應用程序時,它將保持相同的結束)您可以使用它。

public class MyLocationListener implements LocationListener
{
int f=1;
public void onLocationChanged(Location loc) {
    // TODO Auto-generated method stub
   if(f==1)
   {
    loc.getLatitude();
    loc.getLongitude();
    f=2
   }

    String Text = "My current location is: " +
    "Latitud = " + loc.getLatitude() +
    "Longitud = " + loc.getLongitude();

    TextView txtgps = (TextView) findViewById(R.id.text_GPS_Coordinates);

    txtgps.setText(Text);

    Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();

}

現在它將只獲得一個位置坐標(即第一個坐標)。

請注意,它只在應用程序運行時獲取一次該位置。 下次打開您的應用程序時,它將被更改。 我想在移動過程中找到位置不要使用此方法。

暫無
暫無

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

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