当我们在室内使用android手机时,如何快速获取经纬度或gps数据?
我试图通过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
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);