19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 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.telephony; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager; 22767a662ecde33c3979bf02b793d392aca0403162Wink Saville 23767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.cdma.CdmaCellLocation; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.gsm.GsmCellLocation; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.ITelephony; 26a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Savilleimport com.android.internal.telephony.PhoneConstants; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 293cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink * Abstract class that represents the location of the device. {@more} 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class CellLocation { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request an update of the current location. If the location has changed, 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a broadcast will be sent to everyone registered with {@link 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PhoneStateListener#LISTEN_CELL_LOCATION}. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void requestLocationUpdate() { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.getService("phone")); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (phone != null) { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project phone.updateServiceLocation(); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore it 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new CellLocation from a intent notifier Bundle 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is used by PhoneStateIntentReceiver and maybe by 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * external applications. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bundle Bundle from intent notifier 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return newly created CellLocation 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static CellLocation newFromBundle(Bundle bundle) { 619d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville // TelephonyManager.getDefault().getCurrentPhoneType() handles the case when 629bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // ITelephony interface is not up yet. 639d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville switch(TelephonyManager.getDefault().getCurrentPhoneType()) { 64a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case PhoneConstants.PHONE_TYPE_CDMA: 65767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new CdmaCellLocation(bundle); 66a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case PhoneConstants.PHONE_TYPE_GSM: 67767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new GsmCellLocation(bundle); 683cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink default: 693cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink return null; 70767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract void fillInNotifierBundle(Bundle bundle); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7941a46718b3deec95661e149b3acea2a9e54016beJohn Wang * @hide 8041a46718b3deec95661e149b3acea2a9e54016beJohn Wang */ 8141a46718b3deec95661e149b3acea2a9e54016beJohn Wang public abstract boolean isEmpty(); 8241a46718b3deec95661e149b3acea2a9e54016beJohn Wang 8341a46718b3deec95661e149b3acea2a9e54016beJohn Wang /** 8437c2839f70293d72b504cb0b84ad81d9419ad8bcAmit Mahajan * Invalidate this object. The location area code and the cell id are set to -1. 8537c2839f70293d72b504cb0b84ad81d9419ad8bcAmit Mahajan * @hide 8637c2839f70293d72b504cb0b84ad81d9419ad8bcAmit Mahajan */ 8737c2839f70293d72b504cb0b84ad81d9419ad8bcAmit Mahajan public abstract void setStateInvalid(); 8837c2839f70293d72b504cb0b84ad81d9419ad8bcAmit Mahajan 8937c2839f70293d72b504cb0b84ad81d9419ad8bcAmit Mahajan /** 903cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink * Return a new CellLocation object representing an unknown 913cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink * location, or null for unknown/none phone radio types. 92767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static CellLocation getEmpty() { 959d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville // TelephonyManager.getDefault().getCurrentPhoneType() handles the case when 969bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh // ITelephony interface is not up yet. 979d72be33181f1bd1386017ce0b0ce17d8ce1cb66Wink Saville switch(TelephonyManager.getDefault().getCurrentPhoneType()) { 98a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case PhoneConstants.PHONE_TYPE_CDMA: 99767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new CdmaCellLocation(); 100a639b311e93ad14d9ee5c2b2c215ed2d86c32d2aWink Saville case PhoneConstants.PHONE_TYPE_GSM: 101767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new GsmCellLocation(); 1023cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink default: 1033cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink return null; 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 107