无法在 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 连接,则无法从网络获取地理位置

如何获取某个国家/地区的位置点取决于 Android 手机配置

即使启用了 GPS,也无法获取位置

无法在真正的 android 设备上获取当前位置

Android 怎样获得手机信息

在 android 中获取位置无法在较新的设备上运行