欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Android手機聯(lián)系人開發(fā)之增刪查改功能

 更新時間:2017年05月05日 11:09:27   作者:夕陽部落  
這篇文章主要介紹了Android手機聯(lián)系人開發(fā)之增刪查改功能,需要的朋友可以參考下

最近在做手機聯(lián)系人的功能模塊的時候,遇到了很多的坑,在網(wǎng)上搜索的有一些所謂的最全的手機聯(lián)系人開發(fā)的介紹還存在一些bug,所以我把我最近的項目心得和方法寫下來,既能幫助大家減少了解android開發(fā)手機聯(lián)系人的門檻,好,廢話少說,接下來直奔主題。

一、深入淺出手機聯(lián)系人的前奏(小米手機的data表跟模擬器的data表不一樣)

1、手機聯(lián)系人主要是對contacts2.db數(shù)據(jù)庫表的操縱,這個數(shù)據(jù)庫中有三個表是比較重要的,分別是data,raw_contacts,mimetyps這三個表。在下面的增刪查改模塊中,主要是根據(jù)表之間的關(guān)系來關(guān)聯(lián)的處理的。

1.1、data表

 

1.2、mimetypes表

這里寫圖片描述 

1.3、raw_contacts表

這里寫圖片描述 

1.4、下載contacts2.db表的方法

在eclipse中打開android模擬器,在eclipse導(dǎo)航欄的window->show View->other..->File Explorer.單擊eclipse導(dǎo)航欄右上角的DDMS,F(xiàn)ile Explorer 下的data->data->com.android.providers.contact->databases下就有contacts2.db數(shù)據(jù)庫了。單擊然后保存就可以了。

查看SqlLite軟件的下載鏈接

這里寫圖片描述 

2、深入淺出之手機聯(lián)系人查詢模塊

 /**
 * 通過輸入獲取電話號碼
 */
 public void number(String name1,long rawContactId) {
 //使用ContentResolver查找聯(lián)系人數(shù)據(jù)
 Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
 //遍歷查詢結(jié)果,找到所需號碼
 while (cursor.moveToNext()) {
  //獲取聯(lián)系人ID
  String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
  //獲取聯(lián)系人的名字
  String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
  if (name1.equals(contactName)) {
  //使用ContentResolver查找聯(lián)系人的電話號碼和用戶名
  Cursor phone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
  if (phone.moveToNext()) {  
  String phoneNumber1 = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));//電話號碼
  String phoneName1 = phone.getString(phone.getColumnIndex(Phone.DISPLAY_NAME));//姓名 
  phoneNumber.setText(phoneNumber1);
  name.setText(phoneName1);
  }
  //獲取郵箱信息
  Cursor emails =getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID+"="+contactId,null,null);
   while(emails.moveToNext()){
   String emailAddress =emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
   email.setText(emailAddress);
   }
   //獲取IM信息
   Cursor cursorQQ =getContentResolver().query(ContactsContract.Data.CONTENT_URI,null,ContactsContract.Data.RAW_CONTACT_ID+"="+rawContactId + " AND " + "mimetype_id=2",null,null);
   while(cursorQQ.moveToNext()){
   //獲取公司信息
   String im1 = cursorQQ.getString(cursorQQ.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); 
   qq.setText(im1);
  }
   //獲取公司信息
   Cursor cursorCompany =getContentResolver().query(ContactsContract.Data.CONTENT_URI,null,ContactsContract.Data.RAW_CONTACT_ID+"="+rawContactId + " AND " + "mimetype_id = 4",null,null); 
   while(cursorCompany.moveToNext()){
   String company1=cursorCompany.getString(cursorCompany.getColumnIndex("data1"));
   String position1=cursorCompany.getString(cursorCompany.getColumnIndex("data4"));
   position.setText(position1); 
   company.setText(company1);
   }
  } 
 }
}

3、深入淺出之手機聯(lián)系人增加模塊 

 //增加聯(lián)系人
 public void addContact(String name, String phoneNumber,String email,String company,String position,String im) { 
 /* 往 raw_contacts 中添加數(shù)據(jù),并獲取添加的id號*/ 
 /* 往 raw_contacts 中添加數(shù)據(jù),并獲取添加的id號*/ 
 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); 
 ContentValues values = new ContentValues(); 
 long rawContactId= ContentUris.parseId(resolver.insert(uri, values)); 
 //插入data表 
 uri = Uri.parse("content://com.android.contacts/data"); 
 // 向data表插入數(shù)據(jù) 
 if (name != "") { 
  values.put("raw_contact_id", rawContactId); 
  values.put("mimetype", "vnd.android.cursor.item/name"); 
  values.put("data2", name); 
  resolver.insert(uri, values); 
 } 
 // 向data表插入電話號碼 
 if ( phoneNumber != "") { 
  values.clear(); 
  values.put("raw_contact_id", rawContactId); 
  values.put("mimetype", "vnd.android.cursor.item/phone_v2"); 
  values.put("data2", "2"); 
  values.put("data1", phoneNumber); 
  resolver.insert(uri, values);
 } 
 //向data表中插入郵箱
 if (email!= "") { 
  // 添加Email 
  values.clear(); 
  values.put("raw_contact_id", rawContactId);
  values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); 
  values.put(Email.DATA, email);
  values.put(Email.TYPE, Email.TYPE_WORK); 
  resolver.insert(uri, values); 
 }
 //向data表中插入聯(lián)系人的組織
 if(company!=""&&position!=""){
  //organization
  values.clear(); 
  values.put(Data.RAW_CONTACT_ID, rawContactId); 
  values.put(Organization.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 
  values.put(Organization.LABEL, name); 
  values.put(Organization.TITLE, position); 
  values.put(Organization.COMPANY, company); 
  values.put(Organization.TYPE,Organization.TYPE_WORK); 
  context.getContentResolver().insert(uri, values); 
 }
 //向data表中插入聯(lián)系人的QQ
 if(im!=""){
  //im
  values.clear(); 
  values.put("raw_contact_id", rawContactId); 
  values.put("mimetype", "vnd.android.cursor.item/im"); 
  values.put(Im.DATA, im); 
  values.put(Im.TYPE, Im.TYPE_WORK); 
  resolver.insert(uri, values); 
 } 
 } 

4、深入淺出之手機聯(lián)系人更新模塊

// 更新聯(lián)系人 
 public void updataContact(long rawContactId,String name,String number,String email,String company,String position,String im) { 
  Uri uri = Uri.parse("content://com.android.contacts/data");//對data表的所有數(shù)據(jù)操作
  ContentValues values = new ContentValues();
  //更新電話號碼
  values.put("data1", number);
  resolver.update(uri, values, "mimetype_id=? and raw_contact_id=?", new String[]{"5", rawContactId+""}) ;
  //更新聯(lián)系人姓名
  values.clear();
  values.put("data1", name);
  resolver.update(uri, values, "mimetype_id=? and raw_contact_id=?", new String[]{"7", rawContactId+""}) ;
  //更新email
  values.clear();
  values.put("data1", email);
  resolver.update(uri, values, "mimetype_id=? and raw_contact_id=?", new String[]{"1", rawContactId+""}) ; 
  //更新im
  values.clear();
  values.put("data1", im);
  resolver.update(uri, values, "mimetype_id=? and raw_contact_id=?", new String[]{"2", rawContactId+""}) ; 
  //更新company
  values.clear();
  values.put("data1", company);
  values.put("data3",name);
  values.put("data4",position);
  resolver.update(uri, values, "mimetype_id=? and raw_contact_id=?", new String[]{"4", rawContactId+""}) ; 
 } 

5、深入淺出之手機聯(lián)系人刪除模塊

// 刪除聯(lián)系人 
 public void deleteContact(long rawContactId) { 
 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
  Cursor cursor =
  resolver.query(uri,new String[]{RawContacts._ID},"contact_id=?",new String[]{String.valueOf(rawContactId) }, null ); 
  if(cursor.moveToFirst()){
  int id = cursor.getInt(0);
  resolver.delete(uri, "_id=?",new String[]{id+""});
  uri = Uri.parse("content://com.android.contacts/data");
  resolver.delete(uri, "raw_contact_id=?",new String[]{id+""});
  cursor.close();
  } 
 } 

6、大話自制手機聯(lián)系人軟件與系統(tǒng)手機聯(lián)系人軟件的區(qū)別

6.1、系統(tǒng)的手機聯(lián)系人軟件在刪除單個聯(lián)系人的時候不是直接刪除的,然是通過把某個值設(shè)置為0,使得該手機聯(lián)系人信息不可見,根據(jù)網(wǎng)上的大多數(shù)實例都是直接把data數(shù)據(jù)庫表中的單個聯(lián)系人的信息直接delete了。

相關(guān)文章

  • Android實現(xiàn)簡單斷點續(xù)傳和下載到本地功能

    Android實現(xiàn)簡單斷點續(xù)傳和下載到本地功能

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡單斷點續(xù)傳和下載到本地功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android監(jiān)聽ScrollView滑動距離的簡單處理

    Android監(jiān)聽ScrollView滑動距離的簡單處理

    這篇文章主要為大家詳細(xì)介紹了Android監(jiān)聽ScrollView滑動距離的簡單處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • RecycleView實現(xiàn)各種尺寸圖片展示

    RecycleView實現(xiàn)各種尺寸圖片展示

    這篇文章主要為大家詳細(xì)介紹了RecycleView實現(xiàn)各種尺寸圖片展示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • android Activity線性布局和表格布局實例講解

    android Activity線性布局和表格布局實例講解

    在activity的布局中,線性布局和表格布局是最簡單的,這次分別從線性布局,表格布局以及線性布局和表格混合布局做了實驗
    2013-11-11
  • Android實現(xiàn)內(nèi)存中數(shù)據(jù)保存到sdcard的方法

    Android實現(xiàn)內(nèi)存中數(shù)據(jù)保存到sdcard的方法

    這篇文章主要介紹了Android實現(xiàn)內(nèi)存中數(shù)據(jù)保存到sdcard的方法,涉及Android的文件讀寫與I/O操作相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • 音量控制鍵控制的音頻流(setVolumeControlStream)描述

    音量控制鍵控制的音頻流(setVolumeControlStream)描述

    當(dāng)開發(fā)多媒體應(yīng)用或者游戲應(yīng)用的時候,需要使用音量控制鍵來設(shè)置程序的音量大小,在Android系統(tǒng)中有多種音頻流,感興趣的朋友可以了解下
    2013-01-01
  • Android Studio 3.0后出現(xiàn)AAPT2與“android.enableAapt2”問題的解決方法

    Android Studio 3.0后出現(xiàn)AAPT2與“android.enableAapt2”問題的解決方法

    這篇文章主要給大家介紹了關(guān)于Android Studio 3.0后出現(xiàn)AAPT2與“android.enableAapt2”問題的解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Android錄屏功能的實現(xiàn)

    Android錄屏功能的實現(xiàn)

    這篇文章主要介紹了Android錄屏功能的實現(xiàn),具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧
    2018-05-05
  • Android動畫之補間動畫(Tween Animation)基礎(chǔ)學(xué)習(xí)

    Android動畫之補間動畫(Tween Animation)基礎(chǔ)學(xué)習(xí)

    補間動畫是指定開始和結(jié)束的圖像狀態(tài),自動生成需要顯示的過度圖像的動畫。補間動畫又分為四種:移動,縮放,旋轉(zhuǎn),通明度等。下面就來給大家一篇關(guān)于Android中補間動畫的基礎(chǔ)知識,有需要的可以參考學(xué)習(xí)。
    2016-09-09
  • Android如何基于坐標(biāo)對View進行模擬點擊事件詳解

    Android如何基于坐標(biāo)對View進行模擬點擊事件詳解

    這篇文章主要給大家介紹了關(guān)于Android如何基于坐標(biāo)對View進行模擬點擊事件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評論