229 lines
6.7 KiB
Java
229 lines
6.7 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.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();
|
|
}
|
|
}
|
|
}
|