3

我创建了一个 Android 应用程序来检索位置。我尝试使用 GPS_PROVIDER,它返回 null .. 但是当我使用 NETWORK_PROVIDER 时工作顺利.. 任何人都可以帮我解决这个问题吗?

这是代码

位置 location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

当我替换"NETWORK_PROVIDER""GPS_PROVIDER"..时,该位置变为空。

我在清单中添加了以下三个权限

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

3 回答 3

2

您的 GPS 位置为空可能有两个原因

  1. 可能是您的 GPS 未激活。尝试从setting menu => Location & Security => Check Use GPS Satellites.
  2. 可能您目前在 GPS 无法正常工作的建筑物中。从大楼里出来检查一下。大多数时间都可能发生这种情况。
于 2012-10-21T03:31:17.450 回答
0

根据文档

如果提供程序当前被禁用,则返回 null。

确保您的 GPS 在设备上处于活动状态,这样您就不会收到 null。

编辑:
也可以尝试运行一次requestLocationUpdates()GPS_PROVIDER两次NETWORK_PROVIDER。以最快的LocationManager方式检索位置并停止搜索。由于 GPS 位置的检索速度比网络位置慢,因此在找到它之后立即停止,因此为 GPS 返回 null。

于 2012-10-21T02:38:05.820 回答
0

当我将“NETWORK_PROVIDER”替换为“GPS_PROVIDER”时,该位置变为空

要解决此问题,请确保已启用位置服务

在此处输入图像描述

记住文档:

如果提供程序当前被禁用,则返回 null。

作为一个选项,如果 GPS 被禁用,您可以同时使用这两个提供商,然后检查网络提供商:

...
 myLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
 if(myLocation == null) {
            myLocation = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
 }

    if(myLocation != null) {
         //Get values for latitude and longitude!
    }
...
于 2018-03-21T21:47:03.153 回答