当我们在室内使用安卓手机时,如何快速获取经纬度或 GPS 数据?
Posted
技术标签:
【中文标题】当我们在室内使用安卓手机时,如何快速获取经纬度或 GPS 数据?【英文标题】:How to get the latitude and longitude or gps data quickly while we are indoor in an android phone? 【发布时间】:2012-01-07 23:36:08 【问题描述】:我正在尝试通过 GPS 从 android 手机获取纬度和经度信息,当我在室外或直接在天空下时,我能够立即获得值,但当我在室内或房间内时获得价值需要一分钟多的时间。当我在房间内使用我的应用程序时,谁能帮助我快速获取此值。
我使用以下代码获取值:
LocationManager locManager;
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f,
locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
和
private final LocationListener locationListener = new LocationListener()
public void onLocationChanged(Location location)
EditText myLocationText = (EditText)findViewById(R.id.editText1);
EditText myLocationText1 = (EditText)findViewById(R.id.editText2);
String latString = "";
String LongString = "";
if (location != null)
double lat = location.getLatitude();
double lng = location.getLongitude();
latString = "" + lat;
LongString ="" + lng;
else
latString = "No location found";
LongString = "No location found";
myLocationText.setText(""+ latString);
myLocationText1.setText(""+ LongString);
除了使用LocationManager
之外,还有其他方法可以获取 GPS 值吗??
【问题讨论】:
我想你会想要使用 GPS 缓存。查看此链接:forums.groundspeak.com/GC/index.php?showtopic=215136。他们正在为此比较各种工具。也许其中之一会符合您的目的? 如果您的应用无法接收到来自卫星的信号,那么 GPS 将无法正常工作。如果您在室内收到任何信号,那将是一个奖励。您不会期望您的电视在没有天线的情况下也能正常工作。 @KevinCoulombe Geocaching 是一项运动,您确定该链接相关吗? Awww,无视我的评论!它是寻宝缓存中的缓存工具... 【参考方案1】:你可以得到最后一个已知位置,而且速度相当快:
/**
* 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;
【讨论】:
【参考方案2】:您可以在LocationManager中使用以下方法获取设备的最后一个已知位置,这是系统范围内最后一次找到的位置。
这个方法是关键:
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
更多详情请查看Obtaining User Location
【讨论】:
【参考方案3】:如果您在室内,最好使用LocationManager.NETWORK_PROVIDER
,因为您不太可能在室内收到信号。您也可以使用getLastKnownLocation()
,但这可能不存在或已过时。
【讨论】:
【参考方案4】:如果你想在房间里找到位置,gps 提供商很慢。您可以尝试更改:
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);
您将在 'public void onLocationChanged(Location location)' 方法中收到位置。
【讨论】:
【参考方案5】:我使用网络提供商来获取坐标,在客厅的房子里总是更快。但是当我在地下室区域尝试相同的操作时,尽管我等了将近几分钟,但它根本没有获取坐标。
注意:我可以从地下室拨打电话,也可以浏览..
【讨论】:
以上是关于当我们在室内使用安卓手机时,如何快速获取经纬度或 GPS 数据?的主要内容,如果未能解决你的问题,请参考以下文章