我有一个侦听来电的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 – 当呼叫被隐瞒/未知时,来电号码是什么字符串值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)