@Test public void shouldReturnBestCustomProviderUsingCriteria() throws Exception { Criteria criteria = new Criteria(); Criteria customProviderCriteria = new Criteria(); // Manually set best provider should be returned ArrayList<Criteria> criteriaList = new ArrayList<>(); customProviderCriteria.setAccuracy(Criteria.ACCURACY_COARSE); criteriaList.add(customProviderCriteria); shadowLocationManager.setProviderEnabled("BEST_ENABLED_PROVIDER_WITH_CRITERIA", true, criteriaList); assertTrue(shadowLocationManager.setBestProvider("BEST_ENABLED_PROVIDER_WITH_CRITERIA", true)); criteria.setAccuracy(Criteria.ACCURACY_COARSE); criteria.setPowerRequirement(Criteria.NO_REQUIREMENT); assertThat(locationManager.getBestProvider(criteria, true)) .isEqualTo("BEST_ENABLED_PROVIDER_WITH_CRITERIA"); assertThat(shadowLocationManager.setBestProvider("BEST_ENABLED_PROVIDER_WITH_CRITERIA", true)) .isTrue(); assertThat(locationManager.getBestProvider(criteria, false)) .isEqualTo("BEST_ENABLED_PROVIDER_WITH_CRITERIA"); assertThat(locationManager.getBestProvider(criteria, true)) .isEqualTo("BEST_ENABLED_PROVIDER_WITH_CRITERIA"); }
@Test public void shouldReturnBestProviderUsingCriteria() { Criteria criteria = new Criteria(); shadowLocationManager.setProviderEnabled(LocationManager.GPS_PROVIDER, false); criteria.setAccuracy(Criteria.ACCURACY_FINE); assertThat(locationManager.getBestProvider(criteria, false)) .isEqualTo(LocationManager.GPS_PROVIDER); shadowLocationManager.setProviderEnabled(LocationManager.NETWORK_PROVIDER, false); criteria.setAccuracy(Criteria.ACCURACY_COARSE); assertThat(locationManager.getBestProvider(criteria, false)) .isEqualTo(LocationManager.NETWORK_PROVIDER); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAccuracy(Criteria.ACCURACY_FINE); assertThat(locationManager.getBestProvider(criteria, false)) .isEqualTo(LocationManager.NETWORK_PROVIDER); }
/** * Asynchronously fetches the current location of the device. * <p> * This will use a default {@link Criteria} with no accuracy or power requirements, which will * generally result in slower, but more accurate location fixes. * <p/> * <strong>Note:</strong> If GPS is the best provider, it might not be able to locate the device * at all and timeout. * * @param timeout The number of milliseconds to allow before timing out. * @return A Task that is resolved when a location is found. * @see android.location.LocationManager#getBestProvider(android.location.Criteria, boolean) * @see android.location.LocationManager#requestLocationUpdates(String, long, float, android.location.LocationListener) */ public static Task<ParseGeoPoint> getCurrentLocationInBackground(long timeout) { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.NO_REQUIREMENT); criteria.setPowerRequirement(Criteria.NO_REQUIREMENT); return LocationNotifier.getCurrentLocationAsync(Parse.getApplicationContext(), timeout, criteria) .onSuccess(new Continuation<Location, ParseGeoPoint>() { @Override public ParseGeoPoint then(Task<Location> task) { Location location = task.getResult(); return new ParseGeoPoint(location.getLatitude(), location.getLongitude()); } }); }
Criteria criteria = new Criteria(); criteria.setPowerRequirement(Criteria.POWER_HIGH); criteria.setAltitudeRequired(false); criteria.setSpeedRequired(true);
public Criteria createFineCriteria() { Criteria c = new Criteria(); c.setAccuracy(Criteria.ACCURACY_FINE);//高精度 c.setAltitudeRequired(true);//包含高度信息 c.setBearingRequired(true);//包含方位信息 c.setSpeedRequired(true);//包含速度信息 c.setCostAllowed(true);//允许付费 c.setPowerRequirement(Criteria.POWER_HIGH);//高耗电 return c; }
private Criteria getCriteria() { Criteria criteria = new Criteria(); // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); // 设置是否需要方位信息 criteria.setBearingRequired(false); // 设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; } @Override
/** * 设置定位参数 * * @return {@link Criteria} */ private Criteria getCriteria() { Criteria criteria = new Criteria(); //设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); //设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); //设置是否需要方位信息 criteria.setBearingRequired(false); //设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; }
/** * 设置定位参数 * * @return {@link Criteria} */ private static Criteria getCriteria() { Criteria criteria = new Criteria(); // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); // 设置是否需要方位信息 criteria.setBearingRequired(false); // 设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; }
@SuppressLint("MissingPermission") //自动将标记移动到当前所在位置 private void autoPositionToCurrentPosition() { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //设置Criteria服务商的信息 Criteria criteria = new Criteria(); //经度要求 criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(false); criteria.setPowerRequirement(Criteria.POWER_LOW); //取得效果最好的criteria String provider = locationManager.getBestProvider(criteria, true); //得到坐标的相关信息 Location location = locationManager.getLastKnownLocation(provider); LatLng currentPosition = new LatLng(location.getLatitude(), location.getLongitude()); mMap.addMarker(new MarkerOptions().position(currentPosition).title("My real position is here")); mMap.moveCamera(CameraUpdateFactory.newLatLng(currentPosition)); }
/** * 设置定位参数 * * @return {@link Criteria} */ private static Criteria getCriteria() { Criteria criteria = new Criteria(); //设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); //设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); //设置是否需要方位信息 criteria.setBearingRequired(false); //设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; }
/** * 设置定位参数 * * @return {@link Criteria} */ private static Criteria getCriteria() { Criteria criteria = new Criteria(); //设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); //设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); //设置是否需要方位信息 criteria.setBearingRequired(false); //设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; }
/** * 设置定位参数 * * @return {@link Criteria} */ private static Criteria getCriteria() { Criteria criteria = new Criteria(); // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); // 设置是否需要方位信息 criteria.setBearingRequired(false); // 设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; }
@SuppressLint("MissingPermission") //自动将标记移动到当前所在位置 private void autoPositionToCurrentPosition() { LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); //设置Criteria服务商的信息 Criteria criteria = new Criteria(); //经度要求 criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(false); criteria.setPowerRequirement(Criteria.POWER_LOW); //取得效果最好的criteria String provider = locationManager.getBestProvider(criteria, true); //得到坐标的相关信息 Location location = locationManager.getLastKnownLocation(provider); LatLng currentPosition = new LatLng(location.getLatitude(), location.getLongitude()); mMap.addMarker(new MarkerOptions().position(currentPosition).title("My real position is here")); mMap.moveCamera(CameraUpdateFactory.newLatLng(currentPosition)); }
criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); String serviceName = Context.LOCATION_SERVICE; mLocationManager = (LocationManager) getSystemService(serviceName);