【问题标题】:Android GPS networkProvider not workingAndroid GPS networkProvider 不工作
【发布时间】:2015-07-10 15:17:36
【问题描述】:

在我的应用程序中,我尝试使用 networkProvider 搜索 android 设备的粗略位置。我只在我的位置管理器中使用 networkProvider,但如果我不打开 GPS 传感器,它将无法工作。

无论 GPS 传感器是打开还是关闭,网络提供商都应该提供粗略的位置吗?

这是我的代码。

public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);


        if(isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
            Log.e("Network","suc");
        else
            Log.e("Network", "fail");

        if (!isNetworkEnabled) {

        } else {
            this.isGetLocation = true;

            if (isNetworkEnabled) {
                Log.e("GpsInfo", "isNetworkEnabled true");
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                if (locationManager != null) {
                    Log.e("GpsInfoClass", "Location manager not NULL");
                    location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                                                    lat = location.getLatitude();
                        lon = location.getLongitude();
                        Log.e("GpsInfoClass", lon + ", " + lat );
                    }else{
                        Log.e("GpsInfoClass", "Location NULL");
                    }
                }else{
                    Log.e("GpsInfo", "Location Manager is null");
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return location;
}

在我的日志中,它打印网络(标签)失败(日志)。

这是什么意思,

 locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

如果 GPS 传感器关闭,则始终返回 false。为什么会这样?我在获取粗略位置时缺少什么?

【问题讨论】:

    标签: android gps geolocation locationmanager


    【解决方案1】:

    无论 GPS 传感器是打开还是关闭,网络提供商都应该提供粗略的位置吗?

    不,GPS 无线电与获取网络位置无关。

    但是,您需要将位置设置设置为 Power SavingHigh Accuracy

    使用此代码显示当前启用的提供程序的 Toast:

       LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
       isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
       isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    
       Toast.makeText(context, "GPS Enabled: " + isGpsEnabled + " Network Location Enabled: " + isNetworkEnabled, Toast.LENGTH_LONG).show();
    

    这是GPS onlyPower Saving 显示的内容:

    所以,你可以看到这个调用:

    locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    

    为仅 GPS 设置返回 false,因为这会禁用网络位置。 并且,它为省电设置返回 true。

    High Accuracy 也会返回 true,因为它同时启用 GPS 和网络定位。

    【讨论】:

      【解决方案2】:

      GPS 传感器仅用于准确定位。如果您创建一个Criteria 并将其提供给 locationManager,系统会自动选择最佳提供者并尝试获取坐标。

      示例;

      LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
      Criteria locationMode = new Criteria();
      locationMode.setBearingRequired(false);
      locationMode.setSpeedRequired(true);
      locationMode.setAccuracy(Criteria.ACCURACY_MEDIUM);
      locationManager.requestSingleUpdate(locationMode, new LocationListener() {@Override
          public void onLocationChanged(Location location) {
          }
      
          @Override
          public void onStatusChanged(String provider, int status, Bundle extras) {
      
          }
      
          @Override
          public void onProviderEnabled(String provider) {
      
          }
      
          @Override
          public void onProviderDisabled(String provider) {
      
          }
      }, null);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多