我正在尝试获取用户在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所需的其他所需方法。谢谢你的帮助!
答案 0 :(得分:1)
首先确保实际调用onLocationChanged()。如果你的GPS已经锁定,那么onLocationChanged可能根本不会被解雇,因为手机认为你没有真正感动过。因此,仅依靠requestLocationUpdates()来获取当前位置并不是一个好习惯。
一般来说,您应该采取以下措施来获得职位:
您应首先使用getLastKnownLocation()尝试根据上次已知位置查找当前位置。
通过调用该位置的getTime()并与当前时间进行比较,检查从步骤#1检索到的位置是否在合理时间内(不太旧)
如果这个最后的已知位置被认为是旧的(我通常使用5-10分钟,具体取决于应用程序的上下文),那么你启动具有特定距离的requestLocationUpdates()(应用程序应假设用户已移动在最后已知位置的指定限度内)
根据需要实施onLocationChanged()
另外注意,我注意到你只使用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()”?