【问题标题】:criteria for both GPS and networkGPS 和网络的标准
【发布时间】:2010-12-17 07:00:47
【问题描述】:

我想知道如何从最佳提供商处获取位置
我是否必须为 GPS 和网络制定两个单独的标准 1 或有没有办法将它们放在一起?
这是我的代码,当我添加 COARSE 标准时 GPS 不继续(屏幕顶部没有 GPS 闪烁徽标),当我使用 FINE 标准时,我没有从网络得到任何东西......那么我是否必须为两者编写标准并在它们之间切换以获得可用的内容,或者它们是否可以在相同的标准中?
因为我有“getBestProvider(criteria, true);”在我的代码中,所以它应该从最好的提供者那里获取位置....对..??!

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
//// criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_HIGH);
String provider = locationManager.getBestProvider(criteria, true);

【问题讨论】:

  • 你为什么还要打电话给setAccuracy(),因为显然你愿意接受任何准确性?
  • 我想要准确度,但在某些位置,如隧道或高层建筑周围,您唯一可以获得的位置是来自网络...

标签: android gps location


【解决方案1】:

使用getBestProviderCriteria.ACCURACY_FINE 永远不会返回NETWORK_PROVIDER,即使wifi 位置通常非常准确。

在我的应用程序中,我使用getProviders 来获取符合我的条件的所有 提供程序,然后添加NETWORK_PROVIDER(如果它已激活但尚未在列表中)。

然后我为这些提供商中的每一个启动一个requestLocationUpdates,确保在我获得足够准确的位置时调用removeUpdates

这样,如果网络提供的位置足够准确,gps提供者就会被关闭

【讨论】:

    【解决方案2】:

    如果未启用 gps,带有 Criteria.ACCURACY_FINE 的@nicopico getBestProvider 可以返回 NETWORK_PROVIDER 我在我的应用程序中使用以下代码

    public void getLocation() {
            // Getting Google Play availability status
            int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);
    
    //        boolean network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    
            // Showing status
            if (status != ConnectionResult.SUCCESS) { // Google Play Services are not available
                Log.e(TAG, "getLocation fired Google Play Services are not available");
    
               mHandler.post(new UiToastCommunicaton(context.getApplicationContext(),
                       context.getResources().getString(R.string.gpserv_notfound)));
            }
    
            // Getting LocationManager object from System Service LOCATION_SERVICE
            locationManager = (LocationManager) context.getSystemService(IntentService.LOCATION_SERVICE);
            if (!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {//check if network location provider context on
                Log.e(TAG, "network location provider not enabled");
            } else {
                criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                criteria.setAltitudeRequired(false);
                criteria.setBearingRequired(false);
                criteria.setCostAllowed(true);
                //criteria.setPowerRequirement(Criteria.POWER_LOW);
                // Getting the name of the best provider
                provider = locationManager.getBestProvider(criteria, true);
    
                // Check provider exists then request for location
                if (provider != null) {
                    requestLocation(locationManager, provider);
                } else {
                    //start wifi, gps, or tell user to do so
                }
    
            }
        }
    public void requestLocation(LocationManager locationManager, String provider) {
    Log.e(TAG, "requestLocation fired getting location now");
    
    if (provider != null) {
    
        locationManager.requestLocationUpdates(provider, 0, 0, this);
        //locationManager.requestLocationUpdates(provider, 0, 0, this, Looper.getMainLooper());
    } else {
        //tell user what has happened
    }
    }
    

    此代码在实现 locationListener 的类中 你可以编辑这一行

    locationManager.requestLocationUpdates(provider, 0, 0, this);
    

    反映你对 locationListener 的实现

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2010-11-23
      • 2021-02-26
      • 2016-12-15
      • 2012-02-22
      相关资源
      最近更新 更多