這是一個系列,咱們將其命名爲android最佳實踐,若是你尚未看以前的文章:android
android最佳實踐(二)github
android最佳實踐(五)segmentfault
你們可能在作app的時候,或多或少須要使用聯繫人,而根據google提供的api,你須要編寫大量的代碼,例如首先須要查詢數據庫,涉及到數據庫表和字段以及對應的SQL語句。app
那麼咱們是否能夠在咱們的項目中添加聯繫人模塊,這樣可以更方便的使用手機聯繫人呢,答案是確定的,並將其做爲一個獨立的模塊,這樣在你的其餘app中,你均可以引入該模塊,或者你可以將該模塊上傳到maven庫,方便你們的使用。maven
那麼先來看看效果吧:ide
首先是未來涉及到的各個模塊的item。測試
而後是單個模塊中的各個測試:
好比咱們如今須要的是原生app中內置的應用,你須要點擊聯繫人按鈕,或者是你須要自定義界面,你點擊聯繫人自定義UI按鈕。
這是當你選擇的是自定義聯繫人,而後選擇的聯繫人有多個電話的時候,你須要選擇:
返回結果是:
是否是很簡單,那麼咱們是怎麼實現的呢:
在此,我展示下個人代碼編寫風格,你須要爲按鈕添加點擊事件,好比聯繫人按鈕,當點擊聯繫人按鈕:
ContactFactory.newContact(this).getContacts();
調用工廠類ContactFactory中的靜態newContact方法,而後調用getContacts方法,就能夠實現針對系統原生app中的內置聯繫人的操做。
你們都應該知道,當你在聯繫人中操做完,好比選擇聯繫人完成後,你須要針對當前選擇的id進行第二次查詢操做,這個時候,咱們接收數據是重寫onActivityResult方法。
而若是你在fragment中調用了startActivityForResult方法,你須要在你的該fragment類中重寫onActivityResult,這樣才能正確的接收數據。
所以,在封裝完成後,你僅僅須要在你調用getContacts後,重寫該類的onActivityResult方法,而後在該類中調用:
ContactFactory.newContact(this).onActivityResult(requestCode, resultCode, data, new ContactCallback() { @Override public void onSuccess(@NonNull String contactNumber, @NonNull String contactName) { mText.setText(contactName + contactNumber); } @Override public void onFailed(@NonNull int errCode, @NonNull String message) { mText.setText(errCode + message); } });
你須要有一個匿名內部類,其會返回onSuccess和onFailed方法,而後針對聯繫人和電話號碼,你能夠作相關的展現。
在你某個activity類或者fragment中調用:
ContactFactory.newContact(this).getContacts();
在該類中重寫方法:
ContactFactory.newContact(this).onActivityResult(requestCode, resultCode, data, null);
我以爲針對聯繫人的封裝仍是頗有必要的,而後你們也能夠經過https://github.com/neuyu/android-best-practices/tree/master/app 查看相關源碼,歡迎star和fork,後期會將單獨的模塊上傳到maven庫,方便你們使用,同時也但願你們可以給相關模塊的開發提供寶貴的建議,謝謝你們指正。