CellLocation.java revision 767a662ecde33c3979bf02b793d392aca0403162
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 Savilleimport android.os.SystemProperties; 23767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.provider.Settings; 24767a662ecde33c3979bf02b793d392aca0403162Wink Saville 25767a662ecde33c3979bf02b793d392aca0403162Wink Saville 26767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.cdma.CdmaCellLocation; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.gsm.GsmCellLocation; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.ITelephony; 29767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.RILConstants; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Abstract class that represents the location of the device. Currently the only 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * subclass is {@link android.telephony.gsm.GsmCellLocation}. {@more} 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class CellLocation { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request an update of the current location. If the location has changed, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a broadcast will be sent to everyone registered with {@link 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PhoneStateListener#LISTEN_CELL_LOCATION}. 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void requestLocationUpdate() { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.getService("phone")); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (phone != null) { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project phone.updateServiceLocation(); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore it 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new CellLocation from a intent notifier Bundle 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is used by PhoneStateIntentReceiver and maybe by 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * external applications. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bundle Bundle from intent notifier 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return newly created CellLocation 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static CellLocation newFromBundle(Bundle bundle) { 65767a662ecde33c3979bf02b793d392aca0403162Wink Saville // TODO: My need to be use: Settings.Secure.getInt(mContext, Settings.Secure.CURRENT_ACTIVE_PHONE, 0)) 66767a662ecde33c3979bf02b793d392aca0403162Wink Saville // instead of SystemProperties??? 67767a662ecde33c3979bf02b793d392aca0403162Wink Saville 68767a662ecde33c3979bf02b793d392aca0403162Wink Saville // NOTE here TelephonyManager.getDefault().getPhoneType() cannot be used since at startup 69767a662ecde33c3979bf02b793d392aca0403162Wink Saville // ITelephony have not been created 70767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (RILConstants.CDMA_PHONE == 71767a662ecde33c3979bf02b793d392aca0403162Wink Saville SystemProperties.getInt(Settings.Secure.CURRENT_ACTIVE_PHONE, 0)) { 72767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new CdmaCellLocation(bundle); 73767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 74767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new GsmCellLocation(bundle); 75767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract void fillInNotifierBundle(Bundle bundle); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new CellLocation object representing an unknown location. 85767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static CellLocation getEmpty() { 88767a662ecde33c3979bf02b793d392aca0403162Wink Saville // TODO: My need to be use: Settings.Secure.getInt(mContext, Settings.Secure.CURRENT_ACTIVE_PHONE, 0)) 89767a662ecde33c3979bf02b793d392aca0403162Wink Saville // instead of SystemProperties??? 90767a662ecde33c3979bf02b793d392aca0403162Wink Saville 91767a662ecde33c3979bf02b793d392aca0403162Wink Saville // NOTE here TelephonyManager.getDefault().getPhoneType() cannot be used since at startup 92767a662ecde33c3979bf02b793d392aca0403162Wink Saville // ITelephony have not been created 93767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (RILConstants.CDMA_PHONE == 94767a662ecde33c3979bf02b793d392aca0403162Wink Saville SystemProperties.getInt(Settings.Secure.CURRENT_ACTIVE_PHONE, 0)) { 95767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new CdmaCellLocation(); 96767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 97767a662ecde33c3979bf02b793d392aca0403162Wink Saville return new GsmCellLocation(); 98767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 100767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 102