163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn/* 263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * you may not use this file except in compliance with the License. 663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * You may obtain a copy of the License at 763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 1063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Unless required by applicable law or agreed to in writing, software 1163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 1263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * See the License for the specific language governing permissions and 1463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * limitations under the License. 1563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 1663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 1763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornpackage com.android.location.provider; 1863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 1963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.content.Context; 2063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.net.NetworkInfo; 2163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.Criteria; 2263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.ILocationManager; 2363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.ILocationProvider; 2463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.location.Location; 2563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.Bundle; 2663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.IBinder; 2763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.RemoteException; 2863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.ServiceManager; 2963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.os.WorkSource; 3063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornimport android.util.Log; 3163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 3263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn/** 3363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * An abstract superclass for location providers that are implemented 3463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * outside of the core android platform. 3563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Location providers can be implemented as services and return the result of 3663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@link LocationProvider#getBinder()} in its getBinder() method. 3763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 3863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @hide 3963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 4063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackbornpublic abstract class LocationProvider { 4163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 4263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn private static final String TAG = "LocationProvider"; 4363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 4463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn private ILocationManager mLocationManager; 4563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 4663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn private ILocationProvider.Stub mProvider = new ILocationProvider.Stub() { 4763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 4863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean requiresNetwork() { 4963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onRequiresNetwork(); 5063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 5163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 5263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean requiresSatellite() { 5363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onRequiresSatellite(); 5463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 5563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 5663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean requiresCell() { 5763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onRequiresCell(); 5863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 5963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 6063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean hasMonetaryCost() { 6163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onHasMonetaryCost(); 6263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 6363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 6463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean supportsAltitude() { 6563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onSupportsAltitude(); 6663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 6763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 6863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean supportsSpeed() { 6963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onSupportsSpeed(); 7063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 7163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 7263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean supportsBearing() { 7363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onSupportsBearing(); 7463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 7563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 7663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public int getPowerRequirement() { 7763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onGetPowerRequirement(); 7863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 7963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 8063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean meetsCriteria(Criteria criteria) { 8163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onMeetsCriteria(criteria); 8263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 8363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 8463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public int getAccuracy() { 8563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onGetAccuracy(); 8663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 8763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 8863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void enable() { 8963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onEnable(); 9063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 9163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 9263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void disable() { 9363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onDisable(); 9463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 9563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 9663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public int getStatus(Bundle extras) { 9763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onGetStatus(extras); 9863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 9963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 10063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public long getStatusUpdateTime() { 10163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onGetStatusUpdateTime(); 10263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 10363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 10463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public String getInternalState() { 10563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onGetInternalState(); 10663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 10763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 10863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void enableLocationTracking(boolean enable) { 10963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onEnableLocationTracking(enable); 11063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 11163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 11263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void setMinTime(long minTime, WorkSource ws) { 11363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onSetMinTime(minTime, ws); 11463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 11563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 11663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void updateNetworkState(int state, NetworkInfo info) { 11763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onUpdateNetworkState(state, info); 11863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 11963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 12063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void updateLocation(Location location) { 12163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onUpdateLocation(location); 12263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 12363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 12463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public boolean sendExtraCommand(String command, Bundle extras) { 12563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return LocationProvider.this.onSendExtraCommand(command, extras); 12663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 12763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 12863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void addListener(int uid) { 12963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onAddListener(uid, new WorkSource(uid)); 13063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 13163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 13263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void removeListener(int uid) { 13363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn LocationProvider.this.onRemoveListener(uid, new WorkSource(uid)); 13463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 13563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn }; 13663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 13763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public LocationProvider() { 13863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn IBinder b = ServiceManager.getService(Context.LOCATION_SERVICE); 13963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn mLocationManager = ILocationManager.Stub.asInterface(b); 14063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 14163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 14263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 14363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@hide} 14463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 14563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /* package */ ILocationProvider getInterface() { 14663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return mProvider; 14763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 14863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 14963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 15063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns the Binder interface for the location provider. 15163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * This is intended to be used for the onBind() method of 15263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * a service that implements a location provider service. 15363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 15463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @return the IBinder instance for the provider 15563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 15663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public IBinder getBinder() { 15763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn return mProvider; 15863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 15963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 16063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 16163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Used by the location provider to report new locations. 16263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 16363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param location new Location to report 16463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 16563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Requires the android.permission.INSTALL_LOCATION_PROVIDER permission. 16663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 16763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public void reportLocation(Location location) { 16863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn try { 16963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn mLocationManager.reportLocation(location, false); 17063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } catch (RemoteException e) { 17163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn Log.e(TAG, "RemoteException in reportLocation: ", e); 17263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 17363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn } 17463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 17563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 17663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the provider requires access to a 17763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * data network (e.g., the Internet), false otherwise. 17863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 17963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onRequiresNetwork(); 18063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 18163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 18263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the provider requires access to a 18363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * satellite-based positioning system (e.g., GPS), false 18463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * otherwise. 18563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 18663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onRequiresSatellite(); 18763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 18863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 18963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the provider requires access to an appropriate 19063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * cellular network (e.g., to make use of cell tower IDs), false 19163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * otherwise. 19263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 19363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onRequiresCell(); 19463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 19563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 19663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the use of this provider may result in a 19763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * monetary charge to the user, false if use is free. It is up to 19863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * each provider to give accurate information. 19963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 20063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onHasMonetaryCost(); 20163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 20263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 20363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the provider is able to provide altitude 20463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * information, false otherwise. A provider that reports altitude 20563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * under most circumstances but may occassionally not report it 20663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * should return true. 20763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 20863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onSupportsAltitude(); 20963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 21063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 21163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the provider is able to provide speed 21263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * information, false otherwise. A provider that reports speed 21363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * under most circumstances but may occassionally not report it 21463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * should return true. 21563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 21663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onSupportsSpeed(); 21763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 21863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 21963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if the provider is able to provide bearing 22063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * information, false otherwise. A provider that reports bearing 22163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * under most circumstances but may occassionally not report it 22263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * should return true. 22363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 22463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onSupportsBearing(); 22563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 22663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 22763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns the power requirement for this provider. 22863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 22963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @return the power requirement for this provider, as one of the 23063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * constants Criteria.POWER_REQUIREMENT_*. 23163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 23263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract int onGetPowerRequirement(); 23363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 23463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 23563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns true if this provider meets the given criteria, 23663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * false otherwise. 23763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 23863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onMeetsCriteria(Criteria criteria); 23963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 24063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 24163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns a constant describing horizontal accuracy of this provider. 24263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * If the provider returns finer grain or exact location, 24363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@link Criteria#ACCURACY_FINE} is returned, otherwise if the 24463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * location is only approximate then {@link Criteria#ACCURACY_COARSE} 24563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * is returned. 24663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 24763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract int onGetAccuracy(); 24863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 24963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 25063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Enables the location provider 25163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 25263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onEnable(); 25363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 25463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 25563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Disables the location provider 25663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 25763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onDisable(); 25863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 25963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 26063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns a information on the status of this provider. 26163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@link android.location.LocationProvider#OUT_OF_SERVICE} is returned if the provider is 26263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * out of service, and this is not expected to change in the near 26363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * future; {@link android.location.LocationProvider#TEMPORARILY_UNAVAILABLE} is returned if 26463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * the provider is temporarily unavailable but is expected to be 26563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * available shortly; and {@link android.location.LocationProvider#AVAILABLE} is returned 26663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * if the provider is currently available. 26763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 26863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * <p> If extras is non-null, additional status information may be 26963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * added to it in the form of provider-specific key/value pairs. 27063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 27163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract int onGetStatus(Bundle extras); 27263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 27363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 27463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns the time at which the status was last updated. It is the 27563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * responsibility of the provider to appropriately set this value using 27663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * {@link android.os.SystemClock#elapsedRealtime SystemClock.elapsedRealtime()}. 27763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * there is a status update that it wishes to broadcast to all its 27863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * listeners. The provider should be careful not to broadcast 27963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * the same status again. 28063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 28163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @return time of last status update in millis since last reboot 28263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 28363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract long onGetStatusUpdateTime(); 28463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 28563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 28663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Returns debugging information about the location provider. 28763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 28863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @return string describing the internal state of the location provider, or null. 28963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 29063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract String onGetInternalState(); 29163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 29263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 29363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Notifies the location provider that clients are listening for locations. 29463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Called with enable set to true when the first client is added and 29563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * called with enable set to false when the last client is removed. 29663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * This allows the provider to prepare for receiving locations, 29763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * and to shut down when no clients are remaining. 29863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 29963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param enable true if location tracking should be enabled. 30063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 30163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onEnableLocationTracking(boolean enable); 30263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 30363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 30463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Notifies the location provider of the smallest minimum time between updates amongst 30563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * all clients that are listening for locations. This allows the provider to reduce 30663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * the frequency of updates to match the requested frequency. 30763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 30863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param minTime the smallest minTime value over all listeners for this provider. 30963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param ws the source this work is coming from. 31063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 31163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onSetMinTime(long minTime, WorkSource ws); 31263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 31363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 31463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Updates the network state for the given provider. This function must 31563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * be overwritten if {@link android.location.LocationProvider#requiresNetwork} returns true. 31663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * The state is {@link android.location.LocationProvider#TEMPORARILY_UNAVAILABLE} (disconnected) 31763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * OR {@link android.location.LocationProvider#AVAILABLE} (connected or connecting). 31863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 31963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param state data state 32063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 32163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onUpdateNetworkState(int state, NetworkInfo info); 32263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 32363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 32463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Informs the provider when a new location has been computed by a different 32563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * location provider. This is intended to be used as aiding data for the 32663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * receiving provider. 32763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 32863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param location new location from other location provider 32963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 33063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onUpdateLocation(Location location); 33163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 33263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 33363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Implements addditional location provider specific additional commands. 33463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 33563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param command name of the command to send to the provider. 33663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param extras optional arguments for the command (or null). 33763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * The provider may optionally fill the extras Bundle with results from the command. 33863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 33963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @return true if the command succeeds. 34063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 34163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract boolean onSendExtraCommand(String command, Bundle extras); 34263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 34363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 34463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Notifies the location provider when a new client is listening for locations. 34563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 34663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param uid user ID of the new client. 34763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param ws a WorkSource representation of the client. 34863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 34963c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onAddListener(int uid, WorkSource ws); 35063c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn 35163c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn /** 35263c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * Notifies the location provider when a client is no longer listening for locations. 35363c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * 35463c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param uid user ID of the client no longer listening. 35563c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn * @param ws a WorkSource representation of the client. 35663c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn */ 35763c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn public abstract void onRemoveListener(int uid, WorkSource ws); 35863c82c027bb3bd2b803e3225c9135c77b1f92b7bDianne Hackborn} 359