如何在Android中使用GPS_PROVIDER获取当前准确的GPS坐标?

时间:2013-01-24 11:02:52

标签: android gps

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

我的Listener类是

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" />

请告诉我给出准确可靠坐标的方法,如果可能的话,请解释一下你的代码。

2 个答案:

答案 0 :(得分:2)

您可能希望最新的位置修复最准确。但是,由于定位的准确性不同,最近的修复并不总是最好的。您应该包含基于多个条件选择位置修复的逻辑。标准也会根据应用程序和现场测试的使用情况而有所不同。

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

  • 检查检索到的位置是否明显高于之前的估算值。
  • 检查位置声明的准确度是否优于或低于先前的估计值。
  • 检查新位置所在的提供商,并确定您是否更信任它。

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

答案 1 :(得分: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();

}

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

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