旧问题:
我试图获取设备的位置坐标,并且我已经按照我在研究过程中在多个区域找到的所有步骤进行了操作。我已经设置了一个LocationManager并使用了与LocationListener绑定的requestLocationUpdates函数。但是,LocationListener不响应。我已经尝试过调试以及在外面走动,以便执行onChangedLocation函数但没有任何反应。在调试中,执行了我的LocationManager的requestLocationUpdates函数,但从未执行过LocationListener。
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
textView = (TextView) findViewById(R.id.textView);
textView2 = (TextView) findViewById(R.id.textView2);
locationListener = new myLocationListener();
textView.setText("Longitude", TextView.BufferType.NORMAL);
textView2.setText("Latitude", TextView.BufferType.NORMAL);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, locationListener);
以上是requestLocationUpdates函数的使用。
private class myLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
//Log.e("Latitude: ", "" + location.getLatitude());
//Log.e("Longitude: ", "" + location.getLongitude());
if(location != null)
{
textView.setText(Double.toString(location.getLongitude()), TextView.BufferType.NORMAL);
textView2.setText(Double.toString(location.getLatitude()), TextView.BufferType.NORMAL);
}
else
{
textView.setText("No Location", TextView.BufferType.NORMAL);
textView2.setText("No Location", TextView.BufferType.NORMAL);
}
Toast.makeText(getApplicationContext(),"onLocationChanged Success",Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
}
这是实现LocationListener的myLocationListener。我为测试目的添加了一些额外的代码。 toast永远不会弹出,所以好像这段代码永远不会被执行。如果有人能帮助我,我会非常感激。
谢谢!
新问题:
在等待响应的同时继续在此页面中进行开发后,我注意到位置服务实际开始工作需要大约一分钟。那么,现在我的问题是:我如何克服用户不得不等待使用应用程序的障碍?我看过使用基于位置的内容的应用程序并不需要那么长时间。我知道有getLastKnownLocation函数但是如果用户再次打开应用程序之前行驶了50英里怎么办?任何有关这方面的帮助将不胜感激。谢谢!
答案 0 :(得分:1)
每个向gps发出位置请求的设备都必须等到gps硬件变热。等待时间会因设备和您所在的位置而异。如果你在建筑物内,这个时间可能需要1分钟或更长时间。
为避免等待,您可以使用getLastKnownLocation方法,如果返回缓存位置,请通过getTime方法检查位置的日期。确定自己,你的场景是旧位置吗?
如果位置太旧,您必须提出位置请求并等待。