android 紧急号码没记录,android – 当呼叫被隐瞒/未知时,来电号码是...
您可以閱讀TelephonyRegistry的來源:Link
/** … this class provides a
centralized place that applications can register and be called back
from. */
來電的廣播是通過以下方法發送的:
private void broadcastCallStateChanged(int state, String incomingNumber) {
....
....
Intent intent = new Intent(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
intent.putExtra(PhoneConstants.STATE_KEY,
DefaultPhoneNotifier.convertCallState(state).toString());
// If `incomingNumber` is empty, the key
// `TelephonyManager.EXTRA_INCOMING_NUMBER` will not be present
// in the attached Bundle
if (!TextUtils.isEmpty(incomingNumber)) {
intent.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, incomingNumber);
}
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
android.Manifest.permission.READ_PHONE_STATE);
}
因此,如果incomingNumber不為空,您將收到與TelephonyManager.EXTRA_INCOMING_NUMBER相對應的值.
incomingNumber來自DefaultPhoneNotifier#notifyPhoneState(Phone):Link
@Override
public void notifyPhoneState(Phone sender) {
Call ringingCall = sender.getRingingCall();
String incomingNumber = "";
if (ringingCall != null && ringingCall.getEarliestConnection() != null){
// Here
incomingNumber = ringingCall.getEarliestConnection().getAddress();
}
try {
mRegistry.notifyCallState(convertCallState(sender.getState()), incomingNumber);
} catch (RemoteException ex) {
// system process is dead
}
}
ringingCall.getEarliestConnection().getAddress()從擴展com.android.internal.telephony.Connection(GsmConnection,CdmaConnection ..)的類之一調用getAddress()方法.
如果查看GsmConnection的構造函數,可以看到為數字和調用者名稱分配了變量.據我所知,作為接收者,你只收到號碼 – 如果有的話.因此,如果是空字符串(當阻止/隱藏調用者ID時),您收到的Bundle中將不會出現TelephonyManager.EXTRA_INCOMING_NUMBER鍵.
您沒有提到為什么需要此信息.如果您嘗試通過比較字符串值來顯示個性化消息,我建議您執行以下操作:
String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER,
"Personalized message for a Blocked Call");
我不確定這是否是一個充分的測試,但是為了模擬被阻止的來電顯示,你可以看一下這個問題:Link.
總結
以上是生活随笔為你收集整理的android 紧急号码没记录,android – 当呼叫被隐瞒/未知时,来电号码是...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言修改elf文件crc32,ELF文
- 下一篇: android 蓝牙耳机 sco,使用A