在Android应用程序中搜索最佳提供商

在Android应用程序中搜索最佳提供商,android,gps,Android,Gps,我正试图通过以下案例搜索最佳提供商: // GPS case R.id.main_menu_gps: // Set up location services mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); mBestProvider = mLocationManager.getBestProvider(new Criteria(), true

我正试图通过以下案例搜索最佳提供商:

// GPS
    case R.id.main_menu_gps:

        // Set up location services
        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        mBestProvider = mLocationManager.getBestProvider(new Criteria(), true);
        Log.d(DEB_TAG, "@@@@Value of mBestProvider is " + mBestProvider);

        if(mBestProvider != null){
            showGpsSearchingDialog();
            mLocationManager.requestLocationUpdates(mBestProvider, 150000, 1, this);
        } else {
            Log.d(DEB_TAG, "Provider is null");
            showGpsAlertDialog();
        }

    break;
我的设备返回“GPS”作为最佳提供商,但无法找到位置,我的进度对话框将永远显示在搜索中。如果我进入“位置/安全”的电话设置并检查“使用无线网络”,最好的提供商是网络,它可以返回位置


当最好的提供商是GPS而没有返回数据时,我是不是做错了什么?

你并不是真的做错了什么,只是有一些通过GPS获取位置的技术。主要问题是,GPS位置可能是可用的最佳供应商(就精度而言),但它可能无法获得网络/结构障碍物的当前位置。没有适当的逻辑来确定提供商试图到达该位置失败或未达到所需精度时经过的时间量;您可能永远无法通过GPS获取位置,因此必须使用其他提供商或作为备用。如果启用GPS,它将始终返回GPS作为最佳提供商,因为您指定了空标准。GPS定位可能需要适当的延迟,如果你在一幢大楼里,你可能永远也得不到定位。因此,如果网络位置是可以接受的,那么你应该只做网络。或者有一个超时时间,这样在某个时候你们就不再等待gps,而是切换到网络。如果您使用的是MapView,则可能需要使用MyLocationOverlay,因为它的内部逻辑将为您处理该问题


顺便说一句,你的代码看起来不错。

你可以看看我选择最佳供应商的策略。

你说得对,我出去了,GPS工作正常。我知道我应该尝试在代码中写入一个“计时器”,如果经过了一定的时间,请尝试其他提供程序。您能给我指出任何显示此类概念的示例吗?谢谢,我将稍后再查看。再次感谢您…我不使用地图视图,因此我将努力找出如何编写下一部分的代码。:)我将如何在我的“案例”陈述中使用这个?我试图找出如何调用它,允许在搜索时显示对话,然后返回当前位置结果。这正是我的代码所做的。您可以调用myLocation.getLocation()并显示一些进度指示器。当callback被调用时,您已经得到了位置数据。谢谢您,但我被难住了。我将在我的答案中更新我的代码,以向您展示我正在尝试的内容。如果有人能告诉我发生了什么…太好了。对不起,我正在努力学习和理解。