1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.location; 18 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 22 /** 23 * A class indicating the application criteria for selecting a 24 * location provider. Providers maybe ordered according to accuracy, 25 * power usage, ability to report altitude, speed, 26 * and bearing, and monetary cost. 27 */ 28 public class Criteria implements Parcelable { 29 /** 30 * A constant indicating that the application does not choose to 31 * place requirement on a particular feature. 32 */ 33 public static final int NO_REQUIREMENT = 0; 34 35 /** 36 * A constant indicating a low power requirement. 37 */ 38 public static final int POWER_LOW = 1; 39 40 /** 41 * A constant indicating a medium power requirement. 42 */ 43 public static final int POWER_MEDIUM = 2; 44 45 /** 46 * A constant indicating a high power requirement. 47 */ 48 public static final int POWER_HIGH = 3; 49 50 /** 51 * A constant indicating a finer location accuracy requirement 52 */ 53 public static final int ACCURACY_FINE = 1; 54 55 /** 56 * A constant indicating an approximate accuracy requirement 57 */ 58 public static final int ACCURACY_COARSE = 2; 59 60 private int mAccuracy = NO_REQUIREMENT; 61 private int mPowerRequirement = NO_REQUIREMENT; 62 // private int mPreferredResponseTime = NO_REQUIREMENT; 63 private boolean mAltitudeRequired = false; 64 private boolean mBearingRequired = false; 65 private boolean mSpeedRequired = false; 66 private boolean mCostAllowed = false; 67 68 /** 69 * Constructs a new Criteria object. The new object will have no 70 * requirements on accuracy, power, or response time; will not 71 * require altitude, speed, or bearing; and will not allow monetary 72 * cost. 73 */ Criteria()74 public Criteria() {} 75 76 /** 77 * Constructs a new Criteria object that is a copy of the given criteria. 78 */ Criteria(Criteria criteria)79 public Criteria(Criteria criteria) { 80 mAccuracy = criteria.mAccuracy; 81 mPowerRequirement = criteria.mPowerRequirement; 82 // mPreferredResponseTime = criteria.mPreferredResponseTime; 83 mAltitudeRequired = criteria.mAltitudeRequired; 84 mBearingRequired = criteria.mBearingRequired; 85 mSpeedRequired = criteria.mSpeedRequired; 86 mCostAllowed = criteria.mCostAllowed; 87 } 88 89 /** 90 * Indicates the desired accuracy for latitude and longitude. Accuracy 91 * may be {@link #ACCURACY_FINE} if desired location 92 * is fine, else it can be {@link #ACCURACY_COARSE}. 93 * More accurate location usually consumes more power and may take 94 * longer. 95 * 96 * @throws IllegalArgumentException if accuracy is negative 97 */ setAccuracy(int accuracy)98 public void setAccuracy(int accuracy) { 99 if (accuracy < NO_REQUIREMENT && accuracy > ACCURACY_COARSE) { 100 throw new IllegalArgumentException("accuracy=" + accuracy); 101 } 102 mAccuracy = accuracy; 103 } 104 105 /** 106 * Returns a constant indicating desired accuracy of location 107 * Accuracy may be {@link #ACCURACY_FINE} if desired location 108 * is fine, else it can be {@link #ACCURACY_COARSE}. 109 */ getAccuracy()110 public int getAccuracy() { 111 return mAccuracy; 112 } 113 114 /** 115 * Indicates the desired maximum power level. The level parameter 116 * must be one of NO_REQUIREMENT, POWER_LOW, POWER_MEDIUM, or 117 * POWER_HIGH. 118 */ setPowerRequirement(int level)119 public void setPowerRequirement(int level) { 120 if (level < NO_REQUIREMENT || level > POWER_HIGH) { 121 throw new IllegalArgumentException("level=" + level); 122 } 123 mPowerRequirement = level; 124 } 125 126 /** 127 * Returns a constant indicating the desired power requirement. The 128 * returned 129 */ getPowerRequirement()130 public int getPowerRequirement() { 131 return mPowerRequirement; 132 } 133 134 // /** 135 // * Indicates the preferred response time of the provider, in milliseconds. 136 // */ 137 // public void setPreferredResponseTime(int time) { 138 // mPreferredResponseTime = time; 139 // } 140 // 141 // /** 142 // * Returns the preferred response time of the provider, in milliseconds. 143 // */ 144 // public int getPreferredResponseTime() { 145 // return mPreferredResponseTime; 146 // } 147 148 /** 149 * Indicates whether the provider is allowed to incur monetary cost. 150 */ setCostAllowed(boolean costAllowed)151 public void setCostAllowed(boolean costAllowed) { 152 mCostAllowed = costAllowed; 153 } 154 155 /** 156 * Returns whether the provider is allowed to incur monetary cost. 157 */ isCostAllowed()158 public boolean isCostAllowed() { 159 return mCostAllowed; 160 } 161 162 /** 163 * Indicates whether the provider must provide altitude information. 164 * Not all fixes are guaranteed to contain such information. 165 */ setAltitudeRequired(boolean altitudeRequired)166 public void setAltitudeRequired(boolean altitudeRequired) { 167 mAltitudeRequired = altitudeRequired; 168 } 169 170 /** 171 * Returns whether the provider must provide altitude information. 172 * Not all fixes are guaranteed to contain such information. 173 */ isAltitudeRequired()174 public boolean isAltitudeRequired() { 175 return mAltitudeRequired; 176 } 177 178 /** 179 * Indicates whether the provider must provide speed information. 180 * Not all fixes are guaranteed to contain such information. 181 */ setSpeedRequired(boolean speedRequired)182 public void setSpeedRequired(boolean speedRequired) { 183 mSpeedRequired = speedRequired; 184 } 185 186 /** 187 * Returns whether the provider must provide speed information. 188 * Not all fixes are guaranteed to contain such information. 189 */ isSpeedRequired()190 public boolean isSpeedRequired() { 191 return mSpeedRequired; 192 } 193 194 /** 195 * Indicates whether the provider must provide bearing information. 196 * Not all fixes are guaranteed to contain such information. 197 */ setBearingRequired(boolean bearingRequired)198 public void setBearingRequired(boolean bearingRequired) { 199 mBearingRequired = bearingRequired; 200 } 201 202 /** 203 * Returns whether the provider must provide bearing information. 204 * Not all fixes are guaranteed to contain such information. 205 */ isBearingRequired()206 public boolean isBearingRequired() { 207 return mBearingRequired; 208 } 209 210 public static final Parcelable.Creator<Criteria> CREATOR = 211 new Parcelable.Creator<Criteria>() { 212 public Criteria createFromParcel(Parcel in) { 213 Criteria c = new Criteria(); 214 c.mAccuracy = in.readInt(); 215 c.mPowerRequirement = in.readInt(); 216 // c.mPreferredResponseTime = in.readInt(); 217 c.mAltitudeRequired = in.readInt() != 0; 218 c.mBearingRequired = in.readInt() != 0; 219 c.mSpeedRequired = in.readInt() != 0; 220 c.mCostAllowed = in.readInt() != 0; 221 return c; 222 } 223 224 public Criteria[] newArray(int size) { 225 return new Criteria[size]; 226 } 227 }; 228 describeContents()229 public int describeContents() { 230 return 0; 231 } 232 writeToParcel(Parcel parcel, int flags)233 public void writeToParcel(Parcel parcel, int flags) { 234 parcel.writeInt(mAccuracy); 235 parcel.writeInt(mPowerRequirement); 236 // parcel.writeInt(mPreferredResponseTime); 237 parcel.writeInt(mAltitudeRequired ? 1 : 0); 238 parcel.writeInt(mBearingRequired ? 1 : 0); 239 parcel.writeInt(mSpeedRequired ? 1 : 0); 240 parcel.writeInt(mCostAllowed ? 1 : 0); 241 } 242 } 243