Android 当呼叫被拒绝/未知时,传入呼叫号码字符串值是多少?

Android 当呼叫被拒绝/未知时,传入呼叫号码字符串值是多少?,android,Android,我有一个收听来电的广播接收器。当来电时,我通过执行以下操作获得号码: Bundle extras = intent.getExtras(); ... String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 当来电来自保留的号码时会发生什么情况,并且为电话号码字符串分配了什么值? 我猜它是null,“未知”,“保留”,或者类似的,但不幸的是,我没有找到如何模拟保留号码的来电,所以我不能确定。您可

我有一个收听来电的
广播接收器。当来电时,我通过执行以下操作获得号码:

Bundle extras = intent.getExtras();
...
String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
当来电来自保留的号码时会发生什么情况,并且为电话号码字符串分配了什么值?


我猜它是
null
“未知”
“保留”
,或者类似的,但不幸的是,我没有找到如何模拟保留号码的来电,所以我不能确定。

您可以通读
电话注册的源代码

/**。。。这个类提供了一个 应用程序可以注册和回调的集中位置 从*/

传入呼叫的广播通过以下方法发送:

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的值。额外的\u传入\u编号
iff
incomingNumber
不为空

incomingNumber
来自
DefaultPhoneNotifier#notifyPhoneState(电话)

ringingCall.getEarliestConnection().getAddress()
从扩展
com.android.internal.telephony.Connection
(GsmConnection,CdmaConnection..)的类之一调用
getAddress()
方法

如果查看
GsmConnection
的构造函数,可以看到为number和caller name分配了变量。据我所知,作为一个接收者,你只会收到号码——如果有号码的话。因此,如果出现空字符串(当来电显示被阻止/保留时),您收到的
捆绑包中将不存在键
TelephonyManager.EXTRA_INCOMING_NUMBER

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

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

我不确定这是否是一个足够的测试,但要模拟阻塞的来电显示,您可以看看这个问题:。

阅读@Bob。恐怕那没用。您的意思是这将返回null。但是,如果它返回未知号码或保留号码(比如你接到保留号码的电话时在手机屏幕上看到的文字),那么会怎样呢?至少在美国,大多数手机都需要有一种方法来阻止来电者的ID信息。为什么不从一个被屏蔽的电话中给自己打个电话,看看会发生什么?
String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER,
                              "Personalized message for a Blocked Call");