Android GPS 始终返回相同的位置

标签 android

我正在尝试获取用户在 Android 中的位置,下面的代码有效,但无论我做什么,它总是返回相同的位置。我在一个空 parking 场中间进行了测试,以确保 GPS 已锁定,事实确实如此。谷歌地图也能正确显示我的位置。下面的代码有问题吗?

public class LocationTestActivity extends Activity implements LocationListener
{   
private Location myLoc;

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    output = (TextView) findViewById(R.id.output);
    myLong = (TextView) findViewById(R.id.longi);
    myLat = (TextView) findViewById(R.id.lat);
    myRefreshed = (TextView) findViewById(R.id.counter);

    mgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public void onLocationChanged(Location location) 
{
    timesChanged++;
    myRefreshed.setText("Refreshed: " + timesChanged);
    myLong.setText("Longitude: " + location.getLongitude());
    myLat.setText("Latitude: " + location.getLatitude());
}
}

我想补充一点,我可以毫无问题地使用模拟器传递一个位置。为了清楚起见,我还删除了 LocationListener 所需的其他方法。感谢您的帮助!

最佳答案

首先确保 onLocationChanged() 确实被调用了。如果你的 GPS 之前已经锁定,那么 onLocationChanged 有可能根本不会被触发,因为手机认为你并没有真正移动过。因此,仅依靠 requestLocationUpdates() 来获取您的当前位置并不是一个好的做法。

一般情况下,您应该按照以下步骤获得职位:

  1. 您应该首先使用 getLastKnownLocation() 尝试根据最后已知位置定位您的当前位置。

  2. 通过在位置中调用 getTime() 并与当前时间进行比较,检查从步骤 #1 中检索到的位置是否在合理的时间内(不会太旧)

  3. 如果这个最后已知的位置被认为是旧的(我通常使用 5-10 分钟,具体取决于应用程序的上下文),那么您以特定距离启动 requestLocationUpdates()(应用程序应该假设用户已经移动在最后已知位置的指定限制内​​)

  4. 根据需要实现 onLocationChanged()

另一个注意事项,我注意到您只使用了 GPS,在很多情况下 GPS 无法锁定因此永远不会调用 onLocationChange(),您的代码应该考虑到这一点并在 onLocationChange() 的情况下检查基于网络的三角测量没有在指定时间内调用

关于Android GPS 始终返回相同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7035056/

相关文章:

Android-Universal-Image-Loader::在 GridView 上加载图像

android - OpenGL - 与 1.1 相比,学习 OpenGL ES 2.0 有多难?

android - 当前使用的布局是横向还是纵向?

java - 使用 Android Studio 虚拟设备执行任务 ':react-native-gesture-handler:compileDebugJavaWithJavac' 失败

android - Sqlite 查询以查找特定列字段值位于输入字符串中的所有行

java - 为什么 'Res' 变量保存一些随机数而不是从编辑文本字段检索数字?

java - 在具有设置菜单项的 ActionBar 上禁用弹出按钮

android - 如何使用 Kotlin 在 Fragment 中使用 ArrayAdapter

android wifi状态随广播接收器改变

安卓唯一标识