android 从可用的最佳提供商处获取位置

标签 android location location-provider

我有这个代码来获得最好的供应商

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationListener = new MyLocationListener();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(criteria, true);
Location mostRecentLocation = lm.getLastKnownLocation(provider);
if(mostRecentLocation != null) {
    latid=mostRecentLocation.getLatitude();
    longid=mostRecentLocation.getLongitude();
}
lm.requestLocationUpdates(provider, 1, 0, locationListener);

然后是监听器

private class MyLocationListener implements LocationListener {

@Override
public void onLocationChanged(Location loc) {
  if (loc != null) {
    latid = loc.getLatitude();
    longid = loc.getLongitude();
    // if(loc.hasAccuracy()==true){
    accuracyd = loc.getAccuracy();
    String providershown = loc.getProvider();    
    accuracy.setText("Location Acquired. Accuracy:"
      + Double.toString(accuracyd) + "m\nProvider: "+providershown);
    accuracy.setBackgroundColor(Color.GREEN);
    // }
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid);
    submituserlocation(userinfo);
   }
}

当我在设备 (htc magic) 上测试它时,我发现当 gps 被禁用时,它会立即从网络锁定。当我启用 gps 时,它不会从网络获取任何数据并等待直到它从 gps 锁定。
我想像谷歌地图一样锁定位置,直到他们有一个良好的 gps 信号,他们使用网络来确定我的位置。
我虽然最好的标准会做到这一点,但他们所做的只是选择一次提供商。
我的代码有问题还是我必须执行线程和超时等操作才能实现?

最佳答案

也许您可以尝试同时收听网络提供商和 GPS 提供商一段时间,然后检查两者的结果。如果您没有来自 gps 的结果,请改用网络结果。我就是这样做的。

关于android 从可用的最佳提供商处获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919358/

相关文章:

android - ClassNotFoundException:在 Android 9 上找不到类 SchemeRegistry

android - 在 android 上,如何中止 geocoder.getFromLocation

resources - 经纬度主要城市列表

android - 访问 GPS 不工作。应用程序使用网络获取位置

java - 在 Content Provider 的帮助下打开 Assets 文件时出现问题

android - 如何在 Android EditText 中显示 iOS 风格的 Emoji 字符?

android - Glide缓存行为

java - 如何读取文件夹、计算文件数量并复制到新文件夹

ANDROID:帮助 LocationProvider

android - 在后台获取过于频繁的位置更新