无法在 Android 手机上获取位置
Posted
技术标签:
【中文标题】无法在 Android 手机上获取位置【英文标题】:Fails to get the location on Android mobile 【发布时间】:2012-03-29 23:50:43 【问题描述】:实际上我的问题是有时我可以获取位置,有时我无法在 android 真实设备上获取位置。我使用以下代码获取位置,
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
我需要在我的应用程序启动时获取位置。我不知道为什么有时它会失败。如何解决这个问题?
【问题讨论】:
你在使用 BroadCastReceiver 吗? 那么你是如何在应用程序启动时获取 GPS 坐标的? @Android,其实我有一个类扩展Application
。我已经提到了 AndroidManifest 文件。我在那个类中使用了这段代码。
提高您的电源要求,并确保您测试可以获取网络或 gps 信号的位置。如果这有帮助,那么这只是传感器没有获得足够的接收以了解位置的情况。
jsmith 听起来不错 - GPS 可能无法接收到位置信息。尝试将设备移到室外或 GPS 连接性更强的已知位置。如果应用程序更频繁地获取位置,那么您就大功告成了。但是,如果您绝对需要一个位置,我可以建议一个AsyncTask
,它会一直尝试获取 GPS 坐标,直到最终找到一些?
【参考方案1】:
@jsmith 评论了我的问题,
提高您的电源要求并确保您在可以测试的地方进行测试 获取网络或 GPS 信号。如果这有帮助,那么这只是一个案例 传感器接收不到足够的信号来了解位置。
这是我问题的正确答案。现在它工作正常。
【讨论】:
【参考方案2】:您忘记请求“位置更新”,请在声明 LocationManager
后使用此功能:
locationManager.requestLocationUpdates(provider, 0, 0, this);
你必须让类实现LocationListener
然后添加这个函数:
public void onLocationChanged(Location location)
//get the location here
如果您不想重复获取位置,则在获取位置后,您必须以这种方式停止“位置更新”:
locationManager.removeUpdates(this);
如果您希望应用程序始终侦听“位置更新”,您最好在onResume()
中请求更新并删除onPause()
和onDestroy()
中的更新
祝你好运
【讨论】:
以上是关于无法在 Android 手机上获取位置的主要内容,如果未能解决你的问题,请参考以下文章
Android:如果手机通过 WiFi 连接,则无法从网络获取地理位置