Android添加聯(lián)系人到通訊錄的方法
字段
聯(lián)系人名字
名字不知道為什么,值設置了之后傳過去沒有,于是自己通過 Intent 最后又單獨傳了一次
// 聯(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)系人昵稱
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ù)組傳進去
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)系人號碼
號碼有很多種類型,電話,手機,傳真,公司,家庭,等
ContentValues row5 = new ContentValues(); // 聯(lián)系人的電話號碼 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)系人的工作號碼 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)系人的住宅號碼 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)系人地址
地址分為家庭,工作和其他。有個問題,這里分段傳入之后添加完成無法顯示,只能自己將國家省市街道拼接,傳入到了地址字段,這樣就可以顯示出來,但是郵政編碼是無法顯示的
//其他地址 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ù)庫中,另外兩種是跳轉,直接新增或者添加到現(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. 跳轉添加
將上邊的所有 row 添加到數(shù)組中,一起傳遞
List<ContentValues> values = new ArrayList<>(); //添加需要設置的數(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ù)組中,一起傳遞,跳轉后需要選擇聯(lián)系人
List<ContentValues> values = new ArrayList<>(); //添加需要設置的數(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);
權限
權限不能忘了,不然會閃退報錯的,分別是聯(lián)系人的讀寫權限
<uses-permission android:/> <uses-permission android:/>
總結到此為止,還算比較詳細,有補充歡迎評論。
以上就是Android添加聯(lián)系人到通訊錄的方法的詳細內(nèi)容,更多關于Android添加聯(lián)系人到通訊錄的資料請關注腳本之家其它相關文章!
相關文章
Android使用SharedPreferences存儲數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了Android使用SharedPreferences存儲數(shù)據(jù)的實現(xiàn)方法,可實現(xiàn)針對短信的臨時保存功能,非常簡單實用,需要的朋友可以參考下2016-06-06Android中自定義View的實現(xiàn)方式總結大全
這篇文章主要總結了Android中自定義View的實現(xiàn)方式的相關資料,文中介紹的非常詳細,對各位Android開發(fā)者們學習或者使用自定義View具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-04-04Kotlin文件讀寫與SharedPreferences存儲功能實現(xiàn)方法
SharedPreferences是安卓平臺上一個輕量級的存儲類,用來保存應用的一些常用配置,比如Activity狀態(tài),Activity暫停時,將此activity的狀態(tài)保存到SharedPereferences中;當Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時,再從SharedPreferences中將值取出2022-12-12Android App中實現(xiàn)可以雙擊放大和縮小圖片功能的實例
這篇文章主要介紹了Android App中實現(xiàn)可以雙擊放大和縮小圖片功能的實例,文中的例子不能做到逐級放大但可以做到邊界控制和以觸摸點為中心進行放大,需要的朋友可以參考下2016-03-03零基礎學習教程之Linux下搭建android開發(fā)環(huán)境
這篇文章主要介紹了Linux下搭建android開發(fā)環(huán)境,特別適合零基礎的同學學習,想要在Linux及ubuntu11.10下配置android4.0.3開發(fā)環(huán)境的朋友可以參考一下2015-12-12