【问题标题】:On Android how do I get the phone number from incoming call?在 Android 上,如何从来电中获取电话号码?
【发布时间】:2012-02-11 10:09:59
【问题描述】:

我正在尝试获取来电的“incoming_number”。我搜索并找到了this post,但它已经过时了,我似乎无法让它与谷歌最新版本的 Android (4.0.3) 一起使用。

阅读另一篇文章后,似乎触发来电的最简单(可能也是唯一)方法是设置一个基于 PhoneStateListener 做出反应的 BroadcastReceiver,由 John Feminella 提及。

当我以jakob 在帖子中显示的相同方式进行设置时,调试器永远不会进入 onCallStateChanged() 方法,并且我已经进行了在jakob 的帖子中的评论.. (onCallStateChange"d"())

但是,我仍然没有运气,我认为这种获取传入号码的方法已被弃用,并且在 ICS (4.0.3) 中不起作用。有没有其他常规或半常规的方法来实现这一点?

【问题讨论】:

    标签: android phone-number


    【解决方案1】:

    为了让它在较新版本的 Android(4.0.3 等)中运行,您需要确保您的 minSdkVersion3.. 问题在于我的代码是我的 minSdkVersion7..

    希望这有助于其他人试图解决这个问题! :)

    【讨论】:

      【解决方案2】:

      jakob 没有提到的是您必须在使用之前注册 PhoneStateListener。在您想要拦截来电号码之前将以下代码放在某处(例如,在您的活动的 onCreate 方法中):

      TelephonyManager manager=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);
      manager.listen(new CustomPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
      

      然后应该触发 onCallStateChanged 方法。我不知道这种方法在 4.0.3 中已被弃用。但我认为作为一个快速的解决方案,这应该还是可以的。

      希望对您有所帮助。 干杯

      【讨论】:

      • 我很确定在 jakob 制作的 CallBroadcastReceiver 类中,他使用:CustomPhoneStateListener customPhoneListener = new CustomPhoneStateListener(); telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 但是,它仍然没有达到这一点。我想最终在服务中拥有它并向传入的号码发送短信,但仍然没有运气..
      • 是的,但是他在BroadcastReceiver的onReceive方法中注册了PhoneStateListener。这意味着,它是在触发 BroadcastReceiver 时注册的。因为它是在来电时触发的,所以 PhoneStateListener 在电话来电后注册。然后 PhoneStateListener 不会被触发,因为它只监听状态变化而不是如果有正在进行的呼叫。挂断电话时可能会再次触发。但最好在 onCreate 方法或类似的地方注册 PhoneStateListener,它应该可以正常工作。
      • 当我尝试在我的服务的 onStart(Intent intent, int startId) 部分注册 PhoneStateListener 时,它会使应用程序崩溃。它的定义与您所说的完全一样它也在 Manifest 中定义..
      • 实际上有很多.. 但是,我觉得 BroadcastReceiver 的 Intent 可能是错误的.. 它永远不会进入 BroadcastReceiver.. 因此我会认为它没有被正确触发,不是吗?这里是我的接收者:registerReceiver(smsReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));registerReceiver(resend, new IntentFilter("SMS_SENT"));registerReceiver(callReceiver, new IntentFilter("android.intent.action.PHONE_STATE")); *抱歉,尴尬的换行符.. >.>
      • 我最终得到了它。我需要将我的 minSdkVersion 从 7 降到 3 并且它起作用了。很明显,它在较新版本的 Android 中已被弃用。:-\ 感谢@伙计..
      猜你喜欢
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多