2012-01-16 92 views
0

我想抓住来电的“incoming_number”。我搜索并找到了this post,但已经过时了,我似乎无法使用Google的最新版Android(4.0.3)。在Android上,我如何从传入呼叫中获取电话号码?

在阅读另一篇文章后,似乎最简单(也可能是唯一)的方式来触发一个电话进来是设置一个BroadcastReceiver基于PhoneStateListener,如:John Feminella所述。

当我设置了它是由jakob显示在后调试器从来没有落入onCallStateChanged()方法,我已经做出了在讲话中jakob的帖子中提到的修改,以同样的方式..(onCallStateChange“d”())

不过,我还是我越来越没有运气,我想通抓住incoming_number的这种方法已被弃用,在ICS(4.0.3)不工作。有没有其他传统或半传统的方式来实现这一点?

回答

2

为了得到这个在安卓(4.0.3等)的新版本的工作,你需要确保你的的minSdkVersion是 ..我的代码的问题是,我的的minSdkVersion是 ..

希望这可以帮助其他人试图弄清楚这一点! :)

0

jakob没有提到的是你必须在使用之前注册PhoneStateListener。把下面的代码放到你想拦截来电号码(例如在活动的onCreate方法)前:

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

然后onCallStateChanged方法应该被触发。我不知道这个方法在4.0.3中已经被弃用了。但我认为作为一个快速解决方案,这应该仍然没问题。

希望能帮到你。 干杯

+0

我很确定在** CallBroadcastReceiver **类中,[jakob](http://stackoverflow.com/users/247071/jakob),他使用: 'CustomPhoneStateListener customPhoneListener =新的CustomPhoneStateListener(); telephony.listen(customPhoneListener,PhoneStateListener.LISTEN_CALL_STATE);' 但是,它还没有达到这一点。 我想最终有一个服务中的这个,并发送短信到来电号码,仍然没有运气.. – DizzyThermal 2012-01-16 22:08:11

+0

是的,但他注册PhoneStateListener在BroadcastReceiver的onReceive方法。这意味着,它在BroadcastReceiver被触发时被注册。当呼叫到达时触发,PhoneStateListener在电话通话到达后注册。然后PhoneStateListener不会被触发,因为它只监听状态变化,而不是在有持续的呼叫。也许它会在通话挂断时再次触发。但更好的注册PhoneStateListener在onCreate方法或类似的地方,它应该工作正常。 – Dude 2012-01-16 22:33:27

+0

当我尝试在我的服务的** onStart(Intent intent,int startId)**部分中注册PhoneStateListener时,它会崩溃应用程序。它的定义与您所说的完全相同,也在Manifest中定义。 – DizzyThermal 2012-01-16 23:17:33