/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.location; import android.annotation.Nullable; import android.location.provider.ProviderProperties; /** * Information about the properties of a location provider. * * @deprecated This class is incapable of representing unknown provider properties and may return * incorrect results on the rare occasion when a provider's properties are unknown. Prefer using * {@link LocationManager#getProviderProperties(String)} to retrieve {@link ProviderProperties} * instead. */ @Deprecated public class LocationProvider { /** * @deprecated Location provider statuses are no longer supported. */ @Deprecated public static final int OUT_OF_SERVICE = 0; /** * @deprecated Location provider statuses are no longer supported. */ @Deprecated public static final int TEMPORARILY_UNAVAILABLE = 1; /** * @deprecated Location provider statuses are no longer supported. */ @Deprecated public static final int AVAILABLE = 2; private final String mName; private final @Nullable ProviderProperties mProperties; LocationProvider(String name, @Nullable ProviderProperties properties) { mName = name; mProperties = properties; } /** * Returns the name of this provider. */ public String getName() { return mName; } /** * Returns true if this provider meets the given criteria, * false otherwise. */ public boolean meetsCriteria(Criteria criteria) { return propertiesMeetCriteria(mName, mProperties, criteria); } /** * @hide */ public static boolean propertiesMeetCriteria(String name, ProviderProperties properties, Criteria criteria) { if (LocationManager.PASSIVE_PROVIDER.equals(name)) { // passive provider never matches return false; } if (properties == null) { // unfortunately this can happen for provider in remote services // that have not finished binding yet return false; } if (criteria.getAccuracy() != Criteria.NO_REQUIREMENT && criteria.getAccuracy() < properties.getAccuracy()) { return false; } if (criteria.getPowerRequirement() != Criteria.NO_REQUIREMENT && criteria.getPowerRequirement() < properties.getPowerUsage()) { return false; } if (criteria.isAltitudeRequired() && !properties.hasAltitudeSupport()) { return false; } if (criteria.isSpeedRequired() && !properties.hasSpeedSupport()) { return false; } if (criteria.isBearingRequired() && !properties.hasBearingSupport()) { return false; } if (!criteria.isCostAllowed() && properties.hasMonetaryCost()) { return false; } return true; } /** * Returns true if the provider requires access to a * data network (e.g., the Internet), false otherwise. */ public boolean requiresNetwork() { if (mProperties == null) { return false; } else { return mProperties.hasNetworkRequirement(); } } /** * Returns true if the provider requires access to a * satellite-based positioning system (e.g., GPS), false * otherwise. */ public boolean requiresSatellite() { if (mProperties == null) { return false; } else { return mProperties.hasSatelliteRequirement(); } } /** * Returns true if the provider requires access to an appropriate * cellular network (e.g., to make use of cell tower IDs), false * otherwise. */ public boolean requiresCell() { if (mProperties == null) { return false; } else { return mProperties.hasCellRequirement(); } } /** * Returns true if the use of this provider may result in a * monetary charge to the user, false if use is free. It is up to * each provider to give accurate information. */ public boolean hasMonetaryCost() { if (mProperties == null) { return false; } else { return mProperties.hasMonetaryCost(); } } /** * Returns true if the provider is able to provide altitude * information, false otherwise. A provider that reports altitude * under most circumstances but may occassionally not report it * should return true. */ public boolean supportsAltitude() { if (mProperties == null) { return false; } else { return mProperties.hasAltitudeSupport(); } } /** * Returns true if the provider is able to provide speed * information, false otherwise. A provider that reports speed * under most circumstances but may occassionally not report it * should return true. */ public boolean supportsSpeed() { if (mProperties == null) { return false; } else { return mProperties.hasSpeedSupport(); } } /** * Returns true if the provider is able to provide bearing * information, false otherwise. A provider that reports bearing * under most circumstances but may occassionally not report it * should return true. */ public boolean supportsBearing() { if (mProperties == null) { return false; } else { return mProperties.hasBearingSupport(); } } /** * Returns the power requirement for this provider, one of the ProviderProperties.POWER_USAGE_* * constants. */ public int getPowerRequirement() { if (mProperties == null) { return ProviderProperties.POWER_USAGE_HIGH; } else { return mProperties.getPowerUsage(); } } /** * Returns the rough accuracy of this provider, one of the ProviderProperties.ACCURACY_* * constants. */ public int getAccuracy() { if (mProperties == null) { return ProviderProperties.ACCURACY_COARSE; } else { return mProperties.getAccuracy(); } } }