文章

顯示從 8月, 2016 起發佈的文章

[筆記] SIP VoIP in Android background 避免被系統殺掉

圖片
        在前面一文 「 SIP Voip 在 Android 系統的開發 」 中,我設計了一個 SIP VoIP APP,但是遇到一個大問題 ---- 就是 APP 會被系統殺掉。為了解決這個問題,在網路上尋找各種方法,首先我們要先把 APP 拆成 Activity 和 Service 兩個部份,如下圖一所示。Service 負責透過 JNI 介面與底層的 SIP 、 Media Codec...等通訊,而 Activity 則負責使用者顯示的介面,一旦 Activity 關閉後,至少還有 Service 可以在後台繼續運行。 圖一:SIP VoIP 系統架構圖 Activity 與 Service 間的通訊         兩者之間的通訊分成 Activity 到 Service 的方向,以及 Service 到 Activity 的方向。先說 A 到 S 的方向,第一步就是 Activity bind Service,如下面的代碼。接著,建立一個與 Service 的連線,取得 mService 之後,便可以在 Activity 呼叫 Service 的函式了。可以參考網路上其他人的文章與範例說明。         Intent intent = new Intent ("com.altigen.siptalk.SipService"); bindService (intent, sc, Context.BIND_AUTO_CREATE); private ServiceConnection sc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBound = true; LocalBinder binder = (LocalBinder) service; mService = binder.getSe