android– 当呼叫被隐瞒未知时,来电号码是什么字符串值?

android– 当呼叫被隐瞒未知时,来电号码是什么字符串值?,第1张

概述我有一个侦听来电的BroadcastReceiver.当呼叫进入时,我通过执行以下 *** 作获得号码:Bundleextras=intent.getExtras();...StringphoneNumber=extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);当来电来自保留号码,以及为phoneNumber字符串分配了什么值时会发生

我有一个侦听来电的broadcastReceiver.当呼叫进入时,我通过执行以下 *** 作获得号码:

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

当来电来自保留号码,以及为phoneNumber字符串分配了什么值时会发生什么?

我猜它是null,“未知”,“版主”或类似的东西,但不幸的是我还没有找到如何模拟来自版主号码的来电,所以我不能确定.

解决方法:

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

@OverrIDepublic 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 – 当呼叫被隐瞒/未知时,来电号码是什么字符串值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1107239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存