Android GPS始终返回相同的位置

时间:2011-08-12 02:36:17

标签: android

我正在尝试获取用户在Android中的位置,下面的代码可以正常工作,但无论我做什么,它总会返回相同的位置。我已经在一个空的停车场中间进行了测试,以确保GPS被锁定,确实如此。 Google地图也会正确显示我的位置。下面的代码有问题吗?

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所需的其他所需方法。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

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

一般来说,您应该采取以下措施来获得职位:

  1. 您应首先使用getLastKnownLocation()尝试根据上次已知位置查找当前位置。

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

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

  4. 根据需要实施onLocationChanged()

  5. 另外注意,我注意到你只使用GPS,有很多情况下GPS无法锁定,因此从不调用onLocationChange(),你的代码应该考虑到这一点,并在onLocationChange()的情况下检查基于网络的三角测量未在指定时间内调用

答案 1 :(得分:0)

尝试获取上次位置修复

Location loc =  mgr.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

并在每个位置服务请求之间给出一些时间/距离

 mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);

我希望您有足够的耐心等待设备检索到该位置并触发onLocationChanged();)开玩笑。

答案 2 :(得分:0)

请检查您的清单文件是否已添加这些权限。

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

还有一件事。你在哪里调用“removeUpdates()”?

相关问题