我正在开发一个基于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" />
请告诉我给出准确可靠坐标的方法,如果可能的话,请解释一下你的代码。
答案 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();
}
现在只能获得一个位置坐标(即第一个坐标)。
请注意,它只会在您的应用程序运行时获取一次该位置。下次打开您的应用程序时,它将被更改。我想在移动过程中找到位置,不要使用这种方法。