19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.location; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Iterator; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.NoSuchElementException; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class represents the current state of the GPS engine. 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class is used in conjunction with the {@link Listener} interface. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class GpsStatus { 28b7c4ae91d95cfdb9a87eca1f543ddb2fa38a7c45Mike Lockwood private static final int NUM_SATELLITES = 255; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* These package private values are modified by the LocationManager class */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mTimeToFirstFix; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GpsSatellite mSatellites[] = new GpsSatellite[NUM_SATELLITES]; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final class SatelliteIterator implements Iterator<GpsSatellite> { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GpsSatellite[] mSatellites; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mIndex = 0; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SatelliteIterator(GpsSatellite[] satellites) { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSatellites = satellites; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasNext() { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = mIndex; i < mSatellites.length; i++) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSatellites[i].mValid) { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GpsSatellite next() { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (mIndex < mSatellites.length) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GpsSatellite satellite = mSatellites[mIndex++]; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (satellite.mValid) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return satellite; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NoSuchElementException(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void remove() { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException(); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Iterable<GpsSatellite> mSatelliteList = new Iterable<GpsSatellite>() { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Iterator<GpsSatellite> iterator() { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SatelliteIterator(mSatellites); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent when the GPS system has started. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_STARTED = 1; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent when the GPS system has stopped. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_STOPPED = 2; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent when the GPS system has received its first fix since starting. 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call {@link #getTimeToFirstFix()} to find the time from start to first fix. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_FIRST_FIX = 3; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Event sent periodically to report GPS satellite status. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call {@link #getSatellites()} to retrieve the status for each satellite. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS_EVENT_SATELLITE_STATUS = 4; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used for receiving notifications when GPS status has changed. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface Listener { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to report changes in the GPS status. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The event number is one of: 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_STARTED} 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_STOPPED} 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_FIRST_FIX} 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link GpsStatus#GPS_EVENT_SATELLITE_STATUS} 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When this method is called, the client should call 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link LocationManager#getGpsStatus} to get additional 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * status information. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event event number for this notification 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onGpsStatusChanged(int event); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 118b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood /** 119640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * Used for receiving NMEA sentences from the GPS. 120640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * NMEA 0183 is a standard for communicating with marine electronic devices 121640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * and is a common method for receiving data from a GPS, typically over a serial port. 122640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * See <a href="http://en.wikipedia.org/wiki/NMEA_0183">NMEA 0183</a> for more details. 123640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * You can implement this interface and call {@link LocationManager#addNmeaListener} 124640992dec96fa88f0bbd42c6a02902640a000b35Mike Lockwood * to receive NMEA data from the GPS engine. 125b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood */ 126b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood public interface NmeaListener { 127b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood void onNmeaReceived(long timestamp, String nmea); 128b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood } 129b16e7800be4f879135f239f1f8f586f3712df01eMike Lockwood 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GpsStatus() { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < mSatellites.length; i++) { 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSatellites[i] = new GpsSatellite(i + 1); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used internally within {@link LocationManager} to copy GPS status 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data from the Location Manager Service to its cached GpsStatus instance. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Is synchronized to ensure that GPS status updates are atomic. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized void setStatus(int svCount, int[] prns, float[] snrs, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] elevations, float[] azimuths, int ephemerisMask, 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int almanacMask, int usedInFixMask) { 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int i; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (i = 0; i < mSatellites.length; i++) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSatellites[i].mValid = false; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (i = 0; i < svCount; i++) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int prn = prns[i] - 1; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int prnShift = (1 << prn); 153a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood if (prn >= 0 && prn < mSatellites.length) { 154a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood GpsSatellite satellite = mSatellites[prn]; 155a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood 156a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mValid = true; 157a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mSnr = snrs[i]; 158a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mElevation = elevations[i]; 159a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mAzimuth = azimuths[i]; 160a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mHasEphemeris = ((ephemerisMask & prnShift) != 0); 161a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mHasAlmanac = ((almanacMask & prnShift) != 0); 162a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood satellite.mUsedInFix = ((usedInFixMask & prnShift) != 0); 163a3d2d769833c7b796d073fb4002efe21142a7dc4Mike Lockwood } 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used by {@link LocationManager#getGpsStatus} to copy LocationManager's 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cached GpsStatus instance to the client's copy. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Since this method is only used within {@link LocationManager#getGpsStatus}, 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it does not need to be synchronized. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setStatus(GpsStatus status) { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimeToFirstFix = status.getTimeToFirstFix(); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < mSatellites.length; i++) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSatellites[i].setStatus(status.mSatellites[i]); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setTimeToFirstFix(int ttff) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTimeToFirstFix = ttff; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time required to receive the first fix since the most recent 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * restart of the GPS engine. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return time to first fix in milliseconds 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTimeToFirstFix() { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTimeToFirstFix; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns an array of {@link GpsSatellite} objects, which represent the 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current state of the GPS engine. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the list of satellites 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Iterable<GpsSatellite> getSatellites() { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSatelliteList; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the maximum number of satellites that can be in the satellite 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * list that can be returned by {@link #getSatellites()}. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the maximum number of satellites 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMaxSatellites() { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NUM_SATELLITES; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 215