gpt4 book ai didi

android - 调用被保留/未知时,来电号码字符串值是多少?

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:04 24 4
gpt4 key购买 nike

我有一个 BroadcastReceiver 用于监听来电。当有来电时,我通过执行以下操作获取号码:

Bundle extras = intent.getExtras();
...
String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

当来电来自隐藏号码时会发生什么,为 phoneNumber 字符串分配的值是什么?

我猜它是 null"unknown""withheld" 或类似的东西,但不幸的是我没有找到了如何模拟来自隐瞒号码的来电,所以我不能确定。

最佳答案

您可以阅读 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);
}

因此,您将收到一个对应于 TelephonyManager.EXTRA_INCOMING_NUMBER 的值比较 incomingNumber不为空。

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()调用 getAddress()来自扩展 com.android.internal.telephony.Connection 的类之一的方法(GsmConnection、CdmaConnection..)。

如果您查看 GsmConnection 的构造函数,您可以看到为号码和来电者姓名分配了变量。据我所知,作为收件人,您只会收到号码——如果有的话。因此,如果是空字符串(当调用者 ID 被阻止/保留时),键 TelephonyManager.EXTRA_INCOMING_NUMBER不会出现在 Bundle 中你收到了。

您没有提到为什么需要这些信息。如果您尝试通过比较字符串值来显示个性化消息,我建议您执行以下操作:

String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER,
"Personalized message for a Blocked Call");

我不确定这是否是一个充分的测试,但要模拟被阻止的来电显示,您可以看一下这个问题:Link .

关于android - 调用被保留/未知时,来电号码字符串值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com