Use MS-Assisted mode for single shot GPS fixes if it is supported. Add finer grained control over accuracy to the android.location.Criteria class and location criteria logic from LocationManager to LocationManagerService Change-Id: I156b1f6c6a45d255c87ff917cf3e9726a6d7a75b Signed-off-by: Mike Lockwood <lockwood@android.com>
154 lines
5.1 KiB
Java
154 lines
5.1 KiB
Java
/*
|
|
* 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.os.RemoteException;
|
|
import android.util.Log;
|
|
|
|
/**
|
|
* 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 final String mName;
|
|
private final ILocationManager mService;
|
|
|
|
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
|
|
*
|
|
* {@hide}
|
|
*/
|
|
public LocationProvider(String name, ILocationManager service) {
|
|
if (name.matches(BAD_CHARS_REGEX)) {
|
|
throw new IllegalArgumentException("name " + name +
|
|
" contains an illegal character");
|
|
}
|
|
mName = name;
|
|
mService = service;
|
|
}
|
|
|
|
/**
|
|
* 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) {
|
|
try {
|
|
return mService.providerMeetsCriteria(mName, criteria);
|
|
} catch (RemoteException e) {
|
|
Log.e(TAG, "meetsCriteria: RemoteException", e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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();
|
|
}
|