【问题标题】:Search for Best Provider in Android Application在 Android 应用程序中搜索最佳提供商
【发布时间】:2010-07-13 00:43:25
【问题描述】:

我正在尝试通过以下案例寻找最佳提供商:

// 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 并且没有返回数据时,我做错了吗?

【问题讨论】:

    标签: android gps


    【解决方案1】:

    【讨论】:

    • 我将如何在我的“案例”声明中使用它?我试图弄清楚如何调用它,允许在搜索时显示对话框,然后返回当前位置结果。
    • 这正是我的代码所做的。您可以调用 myLocation.getLocation() 并显示一些进度指示器。调用回调时,您已获得位置数据。
    • 谢谢你,但我很难过。我将在我的答案中更新我的代码,向您展示我正在尝试什么。如果有人可以让我知道发生了什么……太好了。抱歉,我正在努力学习和理解。
    【解决方案2】:

    如果启用了 GPS,它将始终将 GPS 作为最佳提供者返回,因为您指定了一个空标准。 GPS修复可能需要相当长的延迟,如果您在建筑物中,您可能根本无法获得修复。因此,如果网络位置可以接受,那么您应该只做网络。或者有一个超时,以便在某些时候停止等待 gps,然后切换到网络。如果您使用的是 MapView,则可能需要使用 MyLocationOverlay,因为它的内部逻辑会为您处理。

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

    【讨论】:

    • 再次感谢您...我没有使用 MapView,所以我将研究如何编写下一部分。 :)
    【解决方案3】:

    您并没有真正做错什么,只是通过某些技术可以通过 GPS 获取位置。主要问题是 GPS 位置可能是最好的可用提供者(就准确性而言),但由于网络/结构障碍,它可能无法获得当前位置。没有适当的逻辑来确定提供者尝试到达该位置失败或没有所需的准确性时所经过的时间量;您可能永远无法通过 GPS 获得位置,因此必须使用其他提供商或 last known location 作为后备。

    【讨论】:

    • 你说得对,我出去了,GPS 工作正常。我知道我应该尝试在代码中编写一个“计时器”,如果已经过了一定时间,请尝试另一个提供程序。您能指出任何显示此类概念的示例吗?
    • 谢谢,我稍后再查看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 2011-06-18
    • 2011-02-24
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多