Android開(kāi)發(fā)之針對(duì)聯(lián)系人的封裝
大家可能在做app的時(shí)候,或多或少需要使用聯(lián)系人,而根據(jù)google提供的api,你需要編寫(xiě)大量的代碼,例如首先需要查詢(xún)數(shù)據(jù)庫(kù),涉及到數(shù)據(jù)庫(kù)表和字段以及對(duì)應(yīng)的SQL語(yǔ)句。
那么我們是否可以在我們的項(xiàng)目中添加聯(lián)系人模塊,這樣能夠更方便的使用手機(jī)聯(lián)系人呢,答案是肯定的,并將其作為一個(gè)獨(dú)立的模塊,這樣在你的其他app中,你都可以引入該模塊,或者你能夠?qū)⒃撃K上傳到maven庫(kù),方便大家的使用。
那么先來(lái)看看效果吧:
首先是將來(lái)涉及到的各個(gè)模塊的item。

然后是單個(gè)模塊中的各個(gè)測(cè)試:

比如我們現(xiàn)在需要的是原生app中內(nèi)置的應(yīng)用,你需要點(diǎn)擊聯(lián)系人按鈕,或者是你需要自定義界面,你點(diǎn)擊聯(lián)系人自定義UI按鈕。
這是當(dāng)你選擇的是自定義聯(lián)系人,然后選擇的聯(lián)系人有多個(gè)電話(huà)的時(shí)候,你需要選擇:

返回結(jié)果是:

是不是很簡(jiǎn)單,那么我們是怎么實(shí)現(xiàn)的呢:
封裝后的代碼調(diào)用
在此,我展現(xiàn)下我的代碼編寫(xiě)風(fēng)格,你需要為按鈕添加點(diǎn)擊事件,比如聯(lián)系人按鈕,當(dāng)點(diǎn)擊聯(lián)系人按鈕:
ContactFactory.newContact(this).getContacts();
調(diào)用工廠(chǎng)類(lèi)ContactFactory中的靜態(tài)newContact方法,然后調(diào)用getContacts方法,就可以實(shí)現(xiàn)針對(duì)系統(tǒng)原生app中的內(nèi)置聯(lián)系人的操作。
大家都應(yīng)該知道,當(dāng)你在聯(lián)系人中操作完,比如選擇聯(lián)系人完成后,你需要針對(duì)當(dāng)前選擇的id進(jìn)行第二次查詢(xún)操作,這個(gè)時(shí)候,我們接收數(shù)據(jù)是重寫(xiě)onActivityResult方法。
而如果你在fragment中調(diào)用了startActivityForResult方法,你需要在你的該fragment類(lèi)中重寫(xiě)onActivityResult,這樣才能正確的接收數(shù)據(jù)。
因此,在封裝完成后,你僅僅需要在你調(diào)用getContacts后,重寫(xiě)該類(lèi)的onActivityResult方法,然后在該類(lèi)中調(diào)用:
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);
}
});
你需要有一個(gè)匿名內(nèi)部類(lèi),其會(huì)返回onSuccess和onFailed方法,然后針對(duì)聯(lián)系人和電話(huà)號(hào)碼,你可以做相關(guān)的展示。
封裝后總結(jié)
在你某個(gè)activity類(lèi)或者fragment中調(diào)用:
ContactFactory.newContact(this).getContacts();
在該類(lèi)中重寫(xiě)方法:
ContactFactory.newContact(this).onActivityResult(requestCode, resultCode, data, null);
總結(jié)
我覺(jué)得針對(duì)聯(lián)系人的封裝還是很有必要的,然后大家也可以通過(guò)https://github.com/neuyu/android-best-practices/tree/master/app 查看相關(guān)源碼,歡迎star和fork,后期會(huì)將單獨(dú)的模塊上傳到maven庫(kù),方便大家使用,同時(shí)也希望大家能夠給相關(guān)模塊的開(kāi)發(fā)提供寶貴的建議,謝謝大家指正。
相關(guān)文章
Android 8.0升級(jí)不跳轉(zhuǎn)應(yīng)用安裝頁(yè)面的解決方法
這篇文章主要為大家詳細(xì)介紹了Android 8.0升級(jí)不跳轉(zhuǎn)應(yīng)用安裝頁(yè)面的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android亮度調(diào)節(jié)的幾種實(shí)現(xiàn)方法
本篇文章詳細(xì)介紹了Android亮度調(diào)節(jié)的幾種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android ItemDecoration 實(shí)現(xiàn)分組索引列表的示例代碼
本篇文章主要介紹了Android ItemDecoration 實(shí)現(xiàn)分組索引列表的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-10-10
Android開(kāi)發(fā)之Flutter與webview通信橋梁實(shí)現(xiàn)
這篇文章主要為大家介紹了Android開(kāi)發(fā)之Flutter與webview通信橋梁實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Android開(kāi)發(fā)獲取當(dāng)前系統(tǒng)日期和時(shí)間功能示例
這篇文章主要介紹了Android開(kāi)發(fā)獲取當(dāng)前系統(tǒng)日期和時(shí)間功能,結(jié)合實(shí)例形式分析了Android布局、事件響應(yīng)、監(jiān)聽(tīng)以及時(shí)間獲取相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
Android中點(diǎn)擊按鈕啟動(dòng)另一個(gè)Activity及Activity之間傳值問(wèn)題
這篇文章主要介紹了Android中點(diǎn)擊按鈕啟動(dòng)另一個(gè)Activity及Activity之間傳值問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Android實(shí)現(xiàn)在屏幕上移動(dòng)圖片的方法
這篇文章主要介紹了Android實(shí)現(xiàn)在屏幕上移動(dòng)圖片的方法,實(shí)例分析了Android操作圖片的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Android使用Profiler查看應(yīng)用內(nèi)存分析的操作步驟
內(nèi)存分析是Profiler中的一個(gè)組件,可以幫助我們識(shí)別可能會(huì)導(dǎo)致應(yīng)用卡頓、凍結(jié)甚至崩潰的內(nèi)存泄露和內(nèi)存抖動(dòng),本文小編將給大家介紹一下Android使用Profiler查看應(yīng)用內(nèi)存分析的操作步驟,需要的朋友可以參考下2023-10-10
Android中ScrollView嵌套GridView顯示不全解決方法
這篇文章主要介紹了Android中ScrollView嵌套GridView顯示不全解決方法的相關(guān)資料,需要的朋友可以參考下2017-04-04

