天天看點

sipdroid 的類和方法

由于工作需要,對SipDroid和協定Sip進行了研究。以下是前期的研究記錄。

從Sipdroid開始,因為程式是從這開始的。

這是Sip進入的界面, 啟動時程式執行個體話了一個Sip引擎并進行了注冊等操作,用CallsCursor描述了對象,用CallsAdapter擴充卡顯示了它,如果使用者沒有設定服務

端口與沒有設定預設的電話則會彈出對話框進行設定,使用了Receiver在顯示進度以及定位更新等資訊,添加了關于、退出、設定等菜單調用。

進入Receiver廣播的分析

該廣播處理了(開啟與關閉虛拟網、注冊引擎、網絡發生改變時的處理、虛拟網發生的處理、資料改變的處理、電話狀态改變的處理、亮度傳感器的處理、藍牙SCO

音頻連接配接狀态已改變、有線耳機插入或拔出的處理、手機螢幕鎖屏和解鎖都是會發廣播出來的、使用者被喚醒觸發、電源管理、wiif狀态改變、掃描wifi熱點),實作

了構造引擎SipdroidEngine、鈴聲以及震動的開啟與停止、來電去電以及空閑挂斷的判斷處理、通知欄資訊顯示、定位位置更新處理等處理。

RegisterService

這是一個注冊服務,注冊監控了網絡連接配接狀态、任何資料變化、手機狀态變化、插槽變化、螢幕鎖屏以及解屏等。

Caller

這是一個廣播類,電話呼叫廣播攔截,有攔截去電、來電等操作,詳細記錄了時間判斷是否逾時,判斷是否為sip使用者。

SipdroidEngine

程式的主要功能代碼引擎,該類通過使用者代理、注冊代理以及使用者代理簡介實作通話以及視訊,開始引擎是進行了電源管理、wifi管理、使用者…等執行個體化。

SipdroidListener

隻是一個監聽的接口。

OwnWifi

這是一個wifi狀态改變的廣播,用于記錄wifi的狀态。

CreateAccount

建立帳号對話框,帳号屬性--郵箱、服務位址、帳号、随機生成密碼、端口。

Call

主要提供手機通話狀态的資訊。記錄狀态資訊 空閑、活動、通話中、撥号中、警報中、來電中、等待中、丢失中。

ButtonGridLayout

主要的作用是設定顯示的格式,它繼承于父類:ViewGroup。

CallCard

這個類一開始以為是與Card相關的類,其實它本質上就是一個提供UI element的類,它會在通話開始到結束的整個過程中顯示不同的界面變化。

CallerInfo

這個類用于對于給定的電話号碼,查找出撥号人的資訊,是以這個類會與Contacts背景的資料庫會發生互動。

CallerInfoAsyncQuery

撥打資訊同步查詢,執行sql語句查詢。

CallStateException

自定義手機狀态異常

Connection

這個類提供關于通話連接配接資訊,同時會對每一次的通過連接配接進行曆史記錄。

ContactsAsyncHelper

圖像的異步通路,内部定義了加載完成接口,操作圖像的加載以及顯示。

Phone

這是一個接口類,提供了一些手機狀态資訊。

PhoneUtils

手機單元類

SlidingCardManager

管理滑動InCallScreen“電話卡”。在新的“簡化”滑動卡的使用者界面,該卡是始終處于下列狀态之一:螢幕頂部的卡、螢幕底部的卡。

InCallScreen

電話顯示,實作了傳感器接口,通話中的螢幕顯示,

Bluetooth

藍牙工具,管理藍牙的一個類,具備開啟、關閉、判斷可用等功能。

RtpStreamReceiver

是一個線程,一個通用的流接收機。

Activity2

調用通話中的螢幕

AutoAnswer

自動回複顯示界面

CallScreen

來電時的顯示操作界面,以及發送資料線上包、視訊包,接受視訊包等等。

ChangeAccount

帳号改變顯示對話框。

Checkin

登記手續

InstantAutoCompleteTextView

顯示自動比對文本控件

LoopAlarm

保持線上廣播,發送線上包。

LoopLocation

發送拍攝地點的廣播

OneShotAlarm

一杆報警的廣播

OneShotLocation

拍攝地點廣播

Settings

設定界面,針對程式屬性的設定。

SipRingtonePreference

鈴聲操作,有鈴聲選擇器、儲存鈴聲、恢複鈴聲等功能。

SIPUri

服務位址,建立撥打的界面。

VideoCamera

視訊攝像,視訊的操作,獲得遠端視訊,并進行錄制等等。

VideoCameraNew

視訊解鎖

VideoCameraNew2

重新連接配接

VideoPreview

視訊預覽

UserAgent

簡單的SIP使用者代理(UA)。它包括音頻/視訊應用。它可以使用外部音頻/視訊媒體應用工具。

目前僅鼠(強大的音頻工具)和VIC作為外部應用程式的支援。

……

其它的直接看源碼。

界面的類有:

org.sipdroid.sipua.ui.Sipdroid          主界面

org.sipdroid.sipua.ui.PSTN 撥打按鈕界面

org.sipdroid.sipua.ui.SIP   sip界面 同PSTN一樣

org.sipdroid.sipua.ui.AutoAnswer        自動回複

org.sipdroid.sipua.ui.ChangeAccount     帳号改變

org.sipdroid.sipua.ui.SIPUri 服務位址

org.sipdroid.sipua.ui.Activity2 調用通話中的螢幕  轉向通過螢幕

org.sipdroid.sipua.ui.Settings 設定界面

org.sipdroid.sipua.ui.VideoCamera 視訊攝像視圖

org.sipdroid.sipua.ui.InCallScreen 電話顯示

服務的類有:

org.sipdroid.sipua.ui.RegisterService  注冊服務的

廣播接受的類有:

org.sipdroid.sipua.ui.OneShotAlarm   一杆報警的廣播

org.sipdroid.sipua.ui.OneShotAlarm2  一杆報警的廣播 辨別是否有網進行注冊服務

org.sipdroid.sipua.ui.LoopAlarm  保持線上的廣播

org.sipdroid.sipua.ui.OwnWifi   wifi廣播 記錄狀态

org.sipdroid.sipua.ui.LoopLocation   接受拍攝地點的廣播

org.sipdroid.sipua.ui.OneShotLocation  拍攝地點的廣播

org.sipdroid.sipua.ui.Caller  電話呼叫廣播攔截

org.sipdroid.sipua.ui.Receiver  接受廣播(系統完成啟動廣播、網絡連接配接的變化廣播、Vpn 連接配接變化廣播、資料狀态改變廣播、電話狀态改變廣播、亮度傳感器

廣播、藍牙SCO音頻連接配接狀态已改變廣播、有線耳機插入或拔出廣播、手機螢幕鎖屏和解鎖廣播、使用者被喚醒觸發廣播、wiif狀态改變廣播)

Sipdroid

-->Receiver.engine(context).isRegistered(); 進行了引擎的生成,以及開啟RegisterService。

-->PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Settings.PREF_NOPORT, Settings.DEFAULT_NOPORT)

   進行了無端口的判斷,當沒有設定的時候,會彈出一個對話框進行設定。

-->Receiver.engine(this).call(target, true) 進行撥打判斷 最後使用了UserAgent.call進行了撥打。

-->Receiver.engine(this).registerMore(); 引擎更多的注冊 設定本地ip位址、進行了枚舉注冊代理,如果注冊了就顯示出來。

-->onOptionsItemSelected(MenuItem item) 響應菜單,退出時關閉定位、停止引擎、清空、停止服務。

RegisterService 

由Sipdroid裡面的on開啟,此處把監控資料變化、手機狀态變化、插拔變化、螢幕解鎖、網絡變化等廣播開啟。

Receiver  

-->SipdroidEngine mSipdroidEngine; 靜态成員電話引擎,撥打電話的主要成員。

-->engine(context).register();  引擎注冊,sdk隻有大于8,才會啟動藍牙。

-->engine(context).registerMore();  更多注冊代理

-->boolean isFast(int i)  是否快速響應,減少一些重複操作,當存在連接配接資訊,則操作vpn虛拟網。

-->boolean isFastGSM(int i)  當存在連接配接是,減少一些操作。

-->void stopRingtone()  停止鈴聲

-->void onState(int state, String caller) 狀态的改變辨別,起初時隻是建立連接配接,目前狀态改變時,進行了資料流以及相關的操作。

-->void onText(int type, String text, int mInCallResId, long base)  設定通知欄内容顯示

-->void updateAutoAnswer()   更新自動回複

-->void registered()  注冊位置更新定位,定位分兩種,一種是網絡監聽,一種是gps監聽。

-->void enable_wifi(boolean enable)  分情況操作是否開啟關閉wifi

-->void url(final String opt) 是一個多線程,主要是負責報告資料是否有錯。

-->void broadcastCallStateChanged(String state, String number)  改變播放狀态廣播

--> void progress() 顯示進展情況。

-->boolean on_vpn() 是否連接配接VPN虛拟網絡

-->Handler mHandler = new Handler()  處理自定義的消息,主要有wifi 要求接入點掃描、開啟wifi。

-->void onReceive(Context context, Intent intent) 接受(系統完成啟動廣播、網絡連接配接的變化廣播、Vpn 連接配接變化廣播、資料狀态改變廣播、電話狀态改變廣

播、亮度傳感器廣播、藍牙SCO音頻連接配接狀态已改變廣播、有線耳機插入或拔出廣播、手機螢幕鎖屏和解鎖廣播、使用者被喚醒觸發廣播、wiif狀态改變廣播)

SipdroidEngine

主要部分引擎,實作了注冊代理監聽接口。

-->public UserAgent[] uas;    User Agent 使用者代理 

-->public RegisterAgent[] ras  Register Agent 注冊代理

-->private KeepAliveSip[] kas  保持線上包

-->public SipProvider[] sip_providers;  實作SIP傳輸層,是發送和接收SIP消息層

-->PowerManager.WakeLock[] wl   電源管理

-->WifiManager.WifiLock[] wwl;   wifi網絡管理

-->UserAgentProfile getUserAgentProfile(String suffix) 生成一個使用者代理簡介

-->public boolean StartEngine()  開始引擎,執行個體化了電源管理、wifi管理、使用者代理、注冊代理、保持連接配接、協定等等。

-->String getContactURL(String username, SipProvider sip_provider)  得到聯系的位址

-->void setOutboundProxy(SipProvider sip_provider, int i) 設定傳輸綁定代理

-->public void CheckEngine()  比對傳輸代理,有則綁定。

-->public void expire()  清零操作

-->public void unregister(int i)  解除安裝一些操作

-->public void registerMore()  更多注冊 主要是使用者代理簡介 

-->public void register()  根據使用者代理簡介進行注冊

-->public void registerUdp()  同上一樣

-->public void halt()  停止操作

-->public boolean isRegistered() 判斷注冊裡是否已經注冊

-->public boolean isRegistered(int i)  指定項是否已經注冊

-->public void onUaRegistrationSuccess(RegisterAgent reg_ra,NameAddress target, NameAddress contact, String result)

   根據注冊代理、使用者位址、目标位址進行注冊。

-->public void listen() 對使用者代理的進行監聽

-->public boolean call(String target_url, boolean force)  主要的呼叫

-->public void answercall()  回複電話即接聽

-->public void rejectcall()  拒絕電話,挂斷。

-->public void togglehold()   轉接

-->public void transfer(String number) 呼叫轉讓

-->public void togglemute()  切換靜音

-->public void togglebluetooth()   切換到藍牙

-->public int speaker(int mode)   設定說話模式

-->public void keepAlive()    保持線上

……

其它的看源碼了。