Enhance Cell Location Api.
To boost accurary and enhance capability of cell location api, two new APIs, TelephonyManager.getAllCellInfo() and TelephonyManager.listen(LISTEN_CELL_INFO), are added. Two new Class, CellInfo and CellIdentity, are created. This API change returns all information of one cell locaiton at the same time. It also provides additional LTE and timestamp information. Change-Id: I4d0f813107e625ec4ac88c8d980ffd171aa5fc30
This commit is contained in:
@ -29,6 +29,7 @@ import android.telephony.CellLocation;
|
||||
import android.telephony.PhoneStateListener;
|
||||
import android.telephony.ServiceState;
|
||||
import android.telephony.SignalStrength;
|
||||
import android.telephony.CellInfo;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Slog;
|
||||
@ -107,6 +108,8 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
|
||||
private int mOtaspMode = ServiceStateTracker.OTASP_UNKNOWN;
|
||||
|
||||
private CellInfo mCellInfo = null;
|
||||
|
||||
static final int PHONE_STATE_PERMISSION_MASK =
|
||||
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR |
|
||||
PhoneStateListener.LISTEN_CALL_STATE |
|
||||
@ -236,6 +239,13 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
remove(r.binder);
|
||||
}
|
||||
}
|
||||
if ((events & PhoneStateListener.LISTEN_CELL_INFO) != 0) {
|
||||
try {
|
||||
r.callback.onCellInfoChanged(new CellInfo(mCellInfo));
|
||||
} catch (RemoteException ex) {
|
||||
remove(r.binder);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -325,6 +335,26 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
broadcastSignalStrengthChanged(signalStrength);
|
||||
}
|
||||
|
||||
public void notifyCellInfo(CellInfo cellInfo) {
|
||||
if (!checkNotifyPermission("notifyCellInfo()")) {
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (mRecords) {
|
||||
mCellInfo = cellInfo;
|
||||
for (Record r : mRecords) {
|
||||
if ((r.events & PhoneStateListener.LISTEN_CELL_INFO) != 0) {
|
||||
try {
|
||||
r.callback.onCellInfoChanged(new CellInfo(cellInfo));
|
||||
} catch (RemoteException ex) {
|
||||
mRemoveList.add(r.binder);
|
||||
}
|
||||
}
|
||||
}
|
||||
handleRemoveListLocked();
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyMessageWaitingChanged(boolean mwi) {
|
||||
if (!checkNotifyPermission("notifyMessageWaitingChanged()")) {
|
||||
return;
|
||||
@ -530,6 +560,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
pw.println(" mDataConnectionLinkProperties=" + mDataConnectionLinkProperties);
|
||||
pw.println(" mDataConnectionLinkCapabilities=" + mDataConnectionLinkCapabilities);
|
||||
pw.println(" mCellLocation=" + mCellLocation);
|
||||
pw.println(" mCellInfo=" + mCellInfo);
|
||||
pw.println("registrations: count=" + recordCount);
|
||||
for (Record r : mRecords) {
|
||||
pw.println(" " + r.pkgForDebug + " 0x" + Integer.toHexString(r.events));
|
||||
@ -655,6 +686,12 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
|
||||
}
|
||||
|
||||
if ((events & PhoneStateListener.LISTEN_CELL_INFO) != 0) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.ACCESS_COARSE_LOCATION, null);
|
||||
|
||||
}
|
||||
|
||||
if ((events & PHONE_STATE_PERMISSION_MASK) != 0) {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.READ_PHONE_STATE, null);
|
||||
|
Reference in New Issue
Block a user