綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] android實現直接拒接來電

[複製連結] 查看: 2558|回覆: 1|好評: 0
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-6-25 11:34

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
android本身沒有現成的API去拒接電話。android可以通過註冊BroadcastReceiver截取短信,因為這個broadcast是一個 ordered broadcast,所以只要優先級比短信接收程序高,就可以提前終止掉這個broadcast receiver。

但是,電話呼入則沒有類似的機制。不過,綜合網上的一些資料,通過以下大體的步驟,則可以實現拒接電話:

1、註冊broadcast receiver,監視手機狀態:
  1. <receiver android:name=".PhoneBroadcastReceiver">  
  2.     <intent-filter>  
  3.         <action android:name="android.intent.action.PHONE_STATE" />   
  4.     </intent-filter>  
  5. </receiver>
複製代碼
當手機接收到電話時,則會觸發該broadcast receiver。

2、最重要的,就是取得可以控制電話的API。

使用時需要手動添加import:
  1. import com.android.internal.telephony.ITelephony;
複製代碼
值得注意的是,使用這種方式拒接來電,broadcast receiver會被觸發兩次。第一次是收到來電,第二次則是由於調用endCall拒接了後觸發。我們在處理自己的程序邏輯時,可以通過 ITelephony.getCallState來區分。該函數返回1表示來電,0表示拒接來電。

最後,這個方法有時候依然會出現系統接聽電話的界面,並且,通話記錄裡也會有拒接電話的記錄。這個原因大概也是系統底層在處理這塊邏輯時,系統邏輯和通知broadcast receiver的存在先後順序。
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 4碎鑽 +1 幫助 +4 收起 理由
gentle0211 + 1 + 1 非常讚
SJMP + 1 偶像,看完你的內容,讓我找到了活著的意義.
cablecar + 1 很給力!
idvtw + 1

查看全部評分

收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
沙發
jiaums | 收聽TA | 只看該作者
發表於 2012-5-27 19:07
好帖!學習 收藏中!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則