日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Telephony理解

發布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Telephony理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天看了看framework里面的telephony相關的代碼。。。做個小筆記吧.

路徑位于

frameworks/base/telephony/

首先是Ril相關的。上層的所有對電話的操作和狀態 獲取等都是通過Ril來實現的,Ril通過發送命令與底層rild進行交互。

?

CommandsInterface是一個接口,他 定義了操作相關的命令、方法和監聽等。。。


BaseCommands則直接繼承了CommandsInterface接口。。

Ril繼承自BaseCommands,并且負責通過socket與rild通信。。。它將對電話的操作(如:hangupConnection())轉換成為了對應的

RIL_REQUEST_XXX發送到rild


RILReceiver則實現了Runnable接口。即啟動一個循環一直監聽socket,看底層是否發送相關的信息。收到respone進行相關處理后執行processResponse()方法


該方法內通過判斷type分別執行processUnsolicited (p)和processSolicited (p)方法,這也就能獲取電話狀態等消息。

這里將會根據不同的response而通知相應的已經注冊了監聽的對象(通過RegistrantList的notifyRegistrants通知,之前已經通過phonebase的RegisterFor***changed方法注冊).

注冊的時候將會把Handle和Messae.what等注冊進一個RegistrantList實例(加入一個arrayList),Ril收到response之后也是通過RegistrantList來將相應的信息返回給已經注冊

的實例對象。

CallTracker就注冊了相應的監聽。所以當有對應的Response的時候,就會返回給CallTracker,然后CallTracker進行相應的處理,比如updatePhoneStae等。。。

在updatePhoneStae方法里又會調用對應的phone.notifyPhoneStateChanged(根據電話類型分為GSMPhone和CDMAPhone).在此方法內Phone對象又會調用PhoneNotifier.notifyPhoneState

方法。

PhoneNotifier是一個接口定義了電話狀態改變,信號改變的通知等方法。具體的實現是在DefaultPhoneNotifier里面.這里就會將具體的電話事件轉換為函數調用,通知TelephonyRegistry

TelephonyRegistry就會將電話事件給通知出去,這里分兩種類型通知。1是通過廣播發送,2是通過之前注冊的Listener回調回去。

至此,電話事件就對第三方應用可見了。第三方應用就可以通過接受廣播或者TelephonyManager.listen()方法監聽到電話時間而進行相應的處理。

?


轉載于:https://www.cnblogs.com/chenxian/archive/2011/03/03/1970063.html

總結

以上是生活随笔為你收集整理的Telephony理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。