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

spa*_*agi 13 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);
Run Code Online (Sandbox Code Playgroud)

然后是听众

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

当我测试它到一个设备(htc magic)时,我发现当gps被禁用时,它会立即从网络锁定.当我启用gps时,它不会从网络中获取任何数据并等待它从gps锁定.
我想锁定谷歌地图的位置,直到他们有一个良好的GPS信号,他们使用网络来确定我的位置.
我虽然最好的标准会这样做,但他们做的是选择一次提供者.
我的代码有什么问题,或者我必须做线程和超时等来实现它吗?

cap*_*ler 14

也许您可以尝试在一定时间内收听网络提供商和gps提供商,然后检查两者的结果.如果您没有gps的结果,请改用网络结果.这就是我做到的.