| /* |
| * 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; |
| |
| /** |
| * An abstract superclass for location providers. A location provider |
| * provides periodic reports on the geographical location of the |
| * device. |
| * |
| * <p> Each provider has a set of criteria under which it may be used; |
| * for example, some providers require GPS hardware and visibility to |
| * a number of satellites; others require the use of the cellular |
| * radio, or access to a specific carrier's network, or to the |
| * internet. They may also have different battery consumption |
| * characteristics or monetary costs to the user. The {@link |
| * Criteria} class allows providers to be selected based on |
| * user-specified criteria. |
| */ |
| public abstract class LocationProvider { |
| private static final String TAG = "LocationProvider"; |
| // A regular expression matching characters that may not appear |
| // in the name of a LocationProvider. |
| static final String BAD_CHARS_REGEX = "[^a-zA-Z0-9]"; |
| |
| private String mName; |
| |
| public static final int OUT_OF_SERVICE = 0; |
| public static final int TEMPORARILY_UNAVAILABLE = 1; |
| public static final int AVAILABLE = 2; |
| |
| /** |
| * Constructs a LocationProvider with the given name. Provider names must |
| * consist only of the characters [a-zA-Z0-9]. |
| * |
| * @throws IllegalArgumentException if name contains an illegal character |
| */ |
| LocationProvider(String name) { |
| if (name.matches(BAD_CHARS_REGEX)) { |
| throw new IllegalArgumentException("name " + name + |
| " contains an illegal character"); |
| } |
| // Log.d(TAG, "Constructor: name = " + name); |
| mName = name; |
| } |
| |
| /** |
| * 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) { |
| if ((criteria.getAccuracy() != Criteria.NO_REQUIREMENT) && |
| (criteria.getAccuracy() < getAccuracy())) { |
| return false; |
| } |
| int criteriaPower = criteria.getPowerRequirement(); |
| if ((criteriaPower != Criteria.NO_REQUIREMENT) && |
| (criteriaPower < getPowerRequirement())) { |
| return false; |
| } |
| if (criteria.isAltitudeRequired() && !supportsAltitude()) { |
| return false; |
| } |
| if (criteria.isSpeedRequired() && !supportsSpeed()) { |
| return false; |
| } |
| if (criteria.isBearingRequired() && !supportsBearing()) { |
| return false; |
| } |
| return true; |
| } |
| |
| /** |
| * Returns true if the provider requires access to a |
| * data network (e.g., the Internet), false otherwise. |
| */ |
| public abstract boolean requiresNetwork(); |
| |
| /** |
| * Returns true if the provider requires access to a |
| * satellite-based positioning system (e.g., GPS), false |
| * otherwise. |
| */ |
| public abstract boolean requiresSatellite(); |
| |
| /** |
| * Returns true if the provider requires access to an appropriate |
| * cellular network (e.g., to make use of cell tower IDs), false |
| * otherwise. |
| */ |
| public abstract boolean requiresCell(); |
| |
| /** |
| * 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 abstract boolean 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 abstract boolean supportsAltitude(); |
| |
| /** |
| * 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 abstract boolean supportsSpeed(); |
| |
| /** |
| * 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 abstract boolean supportsBearing(); |
| |
| /** |
| * Returns the power requirement for this provider. |
| * |
| * @return the power requirement for this provider, as one of the |
| * constants Criteria.POWER_REQUIREMENT_*. |
| */ |
| public abstract int getPowerRequirement(); |
| |
| /** |
| * Returns a constant describing horizontal accuracy of this provider. |
| * If the provider returns finer grain or exact location, |
| * {@link Criteria#ACCURACY_FINE} is returned, otherwise if the |
| * location is only approximate then {@link Criteria#ACCURACY_COARSE} |
| * is returned. |
| */ |
| public abstract int getAccuracy(); |
| } |