Android添加聯(lián)系人到通訊錄

本周項(xiàng)目中遇到了需要添加聯(lián)系人或者添加到已有聯(lián)系人的需求,聯(lián)系人中需要保存的字段有很多向挖,之前不太熟悉剑令,在這里總結(jié)一下。
@[toc]

字段
聯(lián)系人名字

名字不知道為什么柱彻,值設(shè)置了之后傳過去沒有豪娜,于是自己通過Intent最后又單獨(dú)傳了一次

// 聯(lián)系人名字
ContentValues row1 = new ContentValues();String name = lastName + middleName + firstName;row1.put(ContactsContract.Data.MIMETYPE, 
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);row1.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, 
name);row1.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
firstName);row1.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, 
lastName);row1.put(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, 
middleName);
聯(lián)系人昵稱
// 聯(lián)系人昵稱
ContentValues row2 = new ContentValues();
row2.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE);
row2.put(ContactsContract.CommonDataKinds.Nickname.NAME, nickName);
聯(lián)系人頭像

這里需要將圖片的byte數(shù)組傳進(jìn)去

ContentValues row3 = new ContentValues();
//添加頭像
row3.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
Bitmap bitmap = BitmapFactory.decodeFile(photoFilePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
row3.put(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray());
聯(lián)系人備注
// 聯(lián)系人備注
ContentValues row4 = new ContentValues();
row4.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE);
row4.put(ContactsContract.CommonDataKinds.Note.NOTE, remark);
聯(lián)系人號(hào)碼

號(hào)碼有很多種類型,電話哟楷,手機(jī)瘤载,傳真,公司卖擅,家庭鸣奔,等

ContentValues row5 = new ContentValues();
// 聯(lián)系人的電話號(hào)碼
addPhoneNumber(row5, values, mobilePhoneNumber, 
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);ContentValues row6 = new ContentValues();
// 聯(lián)系人的公司電話
addPhoneNumber(row6, values, hostNumber, 
ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN);ContentValues row7 = new ContentValues();
// 聯(lián)系人的工作號(hào)碼
addPhoneNumber(row7, values, workPhoneNumber, 
ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE);ContentValues row8 = new ContentValues();
// 聯(lián)系人的工作傳真
addPhoneNumber(row8, values, workFaxNumber, 
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK);ContentValues row9 = new ContentValues();
// 聯(lián)系人的住宅號(hào)碼
addPhoneNumber(row9, values, homePhoneNumber, 
ContactsContract.CommonDataKinds.Phone.TYPE_HOME);ContentValues row10 = new ContentValues();
// 聯(lián)系人的住宅傳真
addPhoneNumber(row10, values, homeFaxNumber, 
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME);

//封裝的添加方法
private void addPhoneNumber(
    ContentValues row, ArrayList<ContentValues> values, String phoneNumber, int type) {    
    row.put(ContactsContract.Data.MIMETYPE, 
    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);    
    row.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber);    
    row.put(ContactsContract.CommonDataKinds.Phone.TYPE, type);    
    values.add(row);
}
聯(lián)系人公司和職位
// 聯(lián)系人公司和職位
ContentValues row11 = new ContentValues();
row11.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
row11.put(ContactsContract.CommonDataKinds.Organization.COMPANY, organization);
row11.put(ContactsContract.CommonDataKinds.Organization.TITLE, title);
網(wǎng)站
// 聯(lián)系人網(wǎng)站
ContentValues row12 = new ContentValues();
row12.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
row12.put(ContactsContract.CommonDataKinds.Website.URL, url);
聯(lián)系人郵箱
// 插入Email數(shù)據(jù)
ContentValues row13 = new ContentValues();
row13.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
row13.put(ContactsContract.CommonDataKinds.Email.DATA, email);
row13.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
聯(lián)系人地址

地址分為家庭墨技,工作和其他。有個(gè)問題挎狸,這里分段傳入之后添加完成無法顯示扣汪,只能自己將國(guó)家省市街道拼接,傳入到了地址字段锨匆,這樣就可以顯示出來私痹,但是郵政編碼是無法顯示的

//其他地址
ContentValues row14 = new ContentValues();
addAddress(row14, values, addressCountry, addressState, addressCity, addressStreet, addressPostalCode, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER);
//家庭地址
ContentValues row15 = new ContentValues();
addAddress(row15, values, homeAddressCountry, homeAddressState, homeAddressCity, homeAddressStreet, homeAddressPostalCode, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME);
//工作地址
ContentValues row16 = new ContentValues();
addAddress(row16, values, workAddressCountry, workAddressState, workAddressCity, workAddressStreet, workAddressPostalCode, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);

//添加地址方法
private void addAddress(ContentValues row, ArrayList<ContentValues> values, String country, String region, String city, String street, String addressPostalCode, int type) {
    row.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, country + region + city + street);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, country);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, region);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, city);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, street);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, addressPostalCode);
    row.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, type);
    values.add(row);
}
添加方式

添加方式分為三種,一種是靜默添加统刮,直接存入數(shù)據(jù)庫中紊遵,另外兩種是跳轉(zhuǎn),直接新增或者添加到現(xiàn)有聯(lián)系人中

1.靜默添加

以添加名字為例侥蒙,直接插入到數(shù)據(jù)庫中

// 向RawContacts.CONTENT_URI空值插入暗膜,
// 先獲取Android系統(tǒng)返回的rawContactId
// 后面要基于此id插入值
Uri rawContactUri = mActivity.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
// 內(nèi)容類型
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
// 聯(lián)系人名字
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstName);
values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastName);
values.put(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, middleName);
// 向聯(lián)系人URI添加聯(lián)系人名字
mActivity.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
2.跳轉(zhuǎn)添加

將上邊的所有row添加到數(shù)組中,一起傳遞

List<ContentValues> values = new ArrayList<>();
//添加需要設(shè)置的數(shù)據(jù)
...
Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
intent.putExtra(ContactsContract.Intents.Insert.NAME, name);
intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, values);
mActivity.startActivity(intent);
3.添加到現(xiàn)有聯(lián)系人

將上邊的所有row添加到數(shù)組中鞭衩,一起傳遞学搜,跳轉(zhuǎn)后需要選擇聯(lián)系人

List<ContentValues> values = new ArrayList<>();
//添加需要設(shè)置的數(shù)據(jù)
...
Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, values);
startActivity(intent);
權(quán)限

權(quán)限不能忘了,不然會(huì)閃退報(bào)錯(cuò)的论衍,分別是聯(lián)系人的讀寫權(quán)限

    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>

總結(jié)到此為止瑞佩,還算比較詳細(xì),有補(bǔ)充歡迎評(píng)論坯台。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炬丸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜒蕾,更是在濱河造成了極大的恐慌稠炬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咪啡,死亡現(xiàn)場(chǎng)離奇詭異首启,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撤摸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門毅桃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人准夷,你說我怎么就攤上這事钥飞。” “怎么了冕象?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵代承,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我渐扮,道長(zhǎng)论悴,這世上最難降的妖魔是什么掖棉? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮膀估,結(jié)果婚禮上幔亥,老公的妹妹穿的比我還像新娘。我一直安慰自己察纯,他們只是感情好帕棉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饼记,像睡著了一般香伴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具则,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天即纲,我揣著相機(jī)與錄音,去河邊找鬼博肋。 笑死低斋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匪凡。 我是一名探鬼主播膊畴,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼病游!你這毒婦竟也來了唇跨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤礁遵,失蹤者是張志新(化名)和其女友劉穎轻绞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佣耐,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年唧龄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兼砖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡既棺,死狀恐怖讽挟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丸冕,我是刑警寧澤耽梅,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站胖烛,受9級(jí)特大地震影響眼姐,放射性物質(zhì)發(fā)生泄漏诅迷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一众旗、第九天 我趴在偏房一處隱蔽的房頂上張望罢杉。 院中可真熱鬧,春花似錦贡歧、人聲如沸滩租。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽律想。三九已至,卻和暖如春绍弟,著一層夾襖步出監(jiān)牢的瞬間技即,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工晌柬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姥份,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓年碘,卻偏偏與公主長(zhǎng)得像澈歉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屿衅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348