2012-01-16 94 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