談iphone電話簡訊增強工具kuaidail軟體的實現

來源:互聯網
上載者:User

  首先聲明,本人不是kuaidail軟體的實現作者,是在做相關的項目過程中,想到了也實現了類似的功能,kuaidail軟體本身並

沒有公布相關實現細節,所以在此分享一下。

  在這裡,可以瞭解kuaidail軟體的一些安裝效果:http://bbs.app43.com/thread-15553-1-1.html

一、總述

  kuaidail運行于越獄平台的ios系統上,與其說它是一個軟體,說其是外掛程式更合適不過,因為使用者看到的僅僅是它的設定介面

和最佳化了電話、簡訊等功能的一些形式。它很方便地把iphone使用者對於連絡人的歸屬地,連絡人的圖片,編輯通話記錄,

截獲簡訊,顯示陌生人歸屬地,截獲電話並可以列入黑名單白名單,在撥打到電話介面快速搜尋連絡人等使用者特別需要的功能

很好地和系統的電話、簡訊、通訊錄軟體結合在一起,效率很好,像是系統內建的,可謂精品。

二、軟體實現總述

  kuaidail的實現應該並不是很複雜,對於平台來說,越獄是必要的前提。為了和系統的介面很好地整合,並修改系統介面資訊,

依賴mobilesubstrate也是必要的前提。擷取號碼的歸屬地可以採用讀取號碼歸屬地資料庫的方式實現。實現中最為複雜的地方,

應該就是如何hook恰當的方法或函數,實現正確地改變系統的一些行為,包括介面的顯示,程式啟動並執行步驟等。在這裡面,最為

複雜的無非就是對於簡訊和電話的截取,系統介面附加功能對應於系統庫的函數是什麼,這個過程並非易事。

三、具體實現

   下面將此軟體分數個模組,分別介紹各個模組的實現細節。

   1、設定程式:

       kuaidail在系統的設定介面有設定項,它的實現可以參考iphone應用程式設定項建立的方式,當然它依然需要一些其它的支援,

   那就是系統Preferences目錄中設定檔的支援。

  2、程式主體:

      程式主體應該需要動態庫來實現,也就是像IME、SBSetting這種軟體一樣,在系統/Library/MobileSubstrate/DynamicLibraries

  目錄裡需要儲存kuaidail主體實現程式,例如kuaidail.dylib, 同時會有kuaidail.plist,裡面會有載入的配置項,例如com.apple.mobilephone,

  com.apple.sms等。

  3、通話記錄可編輯

     在iphone的電話程式中,通話記錄是以UITableView的控制項來展示的,它是通過設定UITableView可編輯來完成通話記錄可編輯的。

  電話程式左上方的"編輯"按鈕,可以按照UIBarButtonItem的添加形式添加到UINavigationBar的左側即可實現。刪除通話記錄可能需要

  更新系統通話記錄資料庫,它就是在/Library裡面的通話記錄裡。通話記錄資料庫是sqlite資料庫。

  4、連絡人圖片的展示

    連絡人圖片的擷取不複雜,可以通過ABPersonCopyImageData函數實現,然後在UITableView的cell上根據大小設定下就行了。

  5、連絡人歸屬地顯示

    利用歸屬地資料庫是個好辦法,而且效率也能跟上;appstore上的軟體 快速簡訊+ 就是一個例子。不過,最有效率的方式是自訂歸屬地

  資料格式,將歸屬地資料庫中歸屬地資訊採用順序或逆序排序的方式產生bin檔案,用fopen讀取其中的資訊,採用二分尋找的方式擷取號碼

  的歸屬地資訊,kuaidail就是採用這種方式。

  6、通話記錄中歸屬地顯示在不同位置

     kuaidail軟體在電話程式的最近通話中,根據設定,歸屬地資訊可以顯示在號碼或者連絡人下面,也可以顯示在通話時間的下面,

  顯示 的位置,可以採用hook相關視圖的setFrame方法來實現。相關view的擷取可以通過遞迴擷取view所有子view資訊來得到。

  (2012-1-13 19:14:16 補充)

  7、系統電話程式的鍵盤介面#符號的改變以及右上方協助的i表徵圖的增加

       這個主要需要擷取此介面對應的viewController和view是什麼,可以在MobilePhone庫中classdump擷取標頭檔來尋找,比較容易找到;

  也可以hook如下方法來擷取: UIViewController的viewWillAppear、viewDidAppear和viewDidLoad事件來得到具體viewController的字串

  名稱和介面中所有view的名稱,然後將表徵圖添加上面。#符號支援長按來改變表徵圖,可以採用通用的UILongPressGestrureRecognizer來實現。

   i協助表徵圖按下產生數個協助資訊的小視圖,可以採用UICalloutView或者UIMenuController來實現。

  8、系統電話程式鍵盤介面上方顯示多個號碼,可以迴圈滾動顯示

      可以使用UIScrollView來實現,為了達到可迴圈滾動,可以在UIScrollView的左側和右側各建立一個相同的UIScrollView.

   或者可以在滑動事件程序中,在左側和右側分別顯示上一個和下一個視圖,這樣的話可以節省記憶體。

 (2012-1-18 10:55:46 補充)

  9、截獲系統簡訊事件

       系統未公開的類SMSCTServer包含關於SMS處理的方法,其中_ingestIncomingCTMessage方法是接收簡訊的方法,可以hook它來處理。

  10、截獲系統電話事件

       系統電話事件有很多種方法,但是截獲後同時避免系統的相關處理不是易事。ios4.0後,apple開放了擷取電話來臨訊息的事件;

   但是此事件並很好地這樣的需求,對於加入黑名單的號碼,當此號碼撥過來,系統沒有任何介面展示是最好的效果。hook CTCallCenter類

   的handleNotificationFromConnection方法也不能很好地解決這個問題,用CTTelephonyCenterAddObserver方法貌似效果要好點,但是沒能

   達到kuaidail實現的效果。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.