当我们在室内使用android手机时,如何快速获取经纬度或gps数据?

当我们在室内使用android手机时,如何快速获取经纬度或gps数据?,android,geolocation,gps,location,locationmanager,Android,Geolocation,Gps,Location,Locationmanager,我试图通过GPS从安卓手机上获取纬度和经度信息,当我在户外或天空下时,我能够立即获取值,但当我在室内或房间内时,获取值需要一分钟以上。当我在房间里使用我的应用程序时,有人能帮助我快速获取这些值吗 我使用以下代码获取值: LocationManager locManager; locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); locManager.requestLocationUpdates(Loca

我试图通过GPS从安卓手机上获取纬度和经度信息,当我在户外或天空下时,我能够立即获取值,但当我在室内或房间内时,获取值需要一分钟以上。当我在房间里使用我的应用程序时,有人能帮助我快速获取这些值吗

我使用以下代码获取值:

LocationManager locManager;
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f,
                                  locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);


除了使用
LocationManager

之外,还有其他方法获取GPS值吗?

您可以获取最近已知的位置,而且速度非常快:

/**
 * Gets the last known location.
 *
 * @param locationManager the location manager
 * @return the last known location
 */
public static Location getLastKnownLocation(LocationManager locationManager)
{
    Location bestResult = null;
    float bestAccuracy = 10000;
    long bestTime = 0;

    List<String> matchingProviders = locationManager.getAllProviders();

    for (String provider: matchingProviders) {
        Log.d("LOCATION", "Provider: " + provider);
        Location location = locationManager.getLastKnownLocation(provider);
        Log.d("LOCATION", "Location found? "+ (location==null?"NO":"YES"));
        if (location != null) {
            float accuracy = location.getAccuracy();
            long time = location.getTime();
            Log.d("LOCATION", "Acc: "+ String.valueOf(accuracy) + " -- Time: " + String.valueOf(time));
            if ((time > minTime && accuracy < bestAccuracy)) {
                bestResult = location;
                bestAccuracy = accuracy;
                bestTime = time;
            }
            else if (time < minTime && 
                    bestAccuracy == Float.MAX_VALUE && time > bestTime){
                bestResult = location;
                bestTime = time;
            }
        }
    }
    Log.d("LOCATION", "BEST FOUND? "+ (bestResult==null?"NO":"YES"));

    return bestResult;
}
/**
*获取最后一个已知位置。
*
*@param locationManager位置管理器
*@返回最后一个已知位置
*/
公共静态位置getLastKnownLocation(LocationManager LocationManager)
{
位置bestResult=null;
浮点数精度=10000;
长最佳时间=0;
List matchingProviders=locationManager.getAllProviders();
用于(字符串提供程序:匹配提供程序){
Log.d(“位置”,“提供方:”+提供方);
Location Location=locationManager.getLastKnownLocation(提供者);
Log.d(“位置”,“找到位置?”+(位置==null?”否):“是”);
如果(位置!=null){
浮点精度=location.getAccurance();
long time=location.getTime();
Log.d(“位置”,“附件:”+String.valueOf(精度)+“---时间:”+String.valueOf(时间));
如果((时间>分钟时间和精度<最佳精度)){
最佳结果=位置;
最佳准确度=准确度;
最佳时间=时间;
}
否则如果(时间bestTime){
最佳结果=位置;
最佳时间=时间;
}
}
}
Log.d(“位置”,“最佳发现?”+(bestResult==null?”否):“是”);
返回最佳结果;
}

您可以使用LocationManager中的以下方法获取设备的最后已知位置,这是系统范围内最后找到的位置

这种方法是关键:

Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

有关更多详细信息,请参见

如果您在室内,最好使用
LocationManager.NETWORK\u PROVIDER
,因为您不太可能在室内收到信号。您也可以使用
getLastKnownLocation()
,但这可能不存在或已过时。

如果您想获得房间中的位置,gps提供商将缓慢提供。您可以尝试更改:

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f,
                                  locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
作者:


您将在“public void onLocation Changed(location location)”方法中收到位置信息。

我使用网络提供商获取坐标,在客厅的房子里,它总是要快得多。但当我在地下室尝试同样的方法时,它根本无法获取坐标,尽管我等了几乎几分钟


注意:我可以从地下室打电话,也可以浏览。

我想你会想使用gps缓存。签出此链接:。他们正在为此比较各种工具。也许其中一个符合你的目的?如果你的应用程序无法接收到来自卫星的信号,那么GPS当然无法工作。如果你在室内收到任何信号,那就是一个奖励。你不会希望你的电视没有天线就可以工作。@KevinCoulombe是一项运动,你确定这个链接是相关的吗?啊,不管我怎么说!这是一个用于宝藏搜寻的工具。。。
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f,
                                  locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000L,500.0f,
                                      locationListener);