1

我正在开发一个基于 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" />

请告诉我提供准确可靠坐标的方法,如果可能,请解释您的代码。

4

2 回答 2

2

您可能期望最近的位置修复是最准确的。但是,由于位置修复的准确性各不相同,因此最近的修复并不总是最好的。您应该包括根据几个标准选择位置修复的逻辑。标准也因应用程序和现场测试的用例而异。

您可以采取以下几个步骤来验证位置修复的准确性:

  • 检查检索到的位置是否比之前的估计明显更新。
  • 检查该位置声称的准确度是否比之前的估计更好或更差。
  • 检查新位置来自哪个提供商,并确定您是否更信任它。

除此之外,您的 GPS 可能会为您提供 wifi 或 tower 的最后缓存位置。这是一个已知的错误,要克服这个问题,您可以编写自定义算法来忽略它。

于 2013-01-24T11:15:07.823 回答
1

您用于获取位置的方法始终是准确的。即使您的位置稍有变化,它也会显示不同的坐标。

假设如果你只想得到一个坐标(也就是说,当你第一次打开你的应用程序时,它会保持不变)你可以使用它。

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();

}

现在它将只获得一个位置坐标(即第一个坐标)。

请注意,它仅在您的应用程序运行时获取一次位置。下次打开您的应用程序时,它将更改。我想在运动过程中找到位置不要使用这种方法。

于 2013-01-24T11:12:03.143 回答