Android通讯录联系人的读取、更新、插入、删除等方法

简介:

TestContacts.java:

    package waga.android.study.TestContacts;
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.RawContacts;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.widget.TextView;
    public class TestContacts extends Activity
    {
    TextView myTextView;
    String str;
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            setTitle(R.string.ReadContact);
        }
       
        // 创建选项菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
         super.onCreateOptionsMenu(menu);
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.layout.menu, menu);
      
      return true;
    }
        // 响应选项菜单
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
      switch (item.getItemId())
      {
       // 新建联系人
             case R.id.menu_add:
             {
              // new一 个Intent对 象 , 并指定class
              Intent intent = new Intent();
              intent.setClass(this, NewContactActivity.class);
              startActivity(intent);
              return true;
       }
             
             // 删除联系人
             case R.id.menu_delete:
             {
              // new一 个Intent对 象 , 并指定class
              Intent intent = new Intent();
              intent.setClass(this, DeleteContactActivity.class);
              startActivity(intent);
              return true;
       }
             
             // 更新联系人
             case R.id.menu_update:
             {
              // new一 个Intent对 象 , 并指定class
              Intent intent = new Intent();
              intent.setClass(this, UpdateContactActivity.class);
              startActivity(intent);
              return true;
       }
             
             // 退出
             case R.id.menu_exit:
             {
              finish();
              return true;
             }
      }
      return false;
    }
    @Override
    protected void onResume()
    {
      super.onResume();
      TextView myTextView = (TextView)findViewById(R.id.ContactsInfo);
            str = "";
            
      // 读取所有的联系人
            readAllContacts();
            
            myTextView.setText(str);
    }
    // 读取所有的联系人
        public void readAllContacts()
        {
         ContentResolver cr = getContentResolver();
         Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
            if (cur.getCount() > 0)
            {
             while (cur.moveToNext())
             {
              String rawContactsId = "";
                 String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
              String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
              str += "ContactID:" + id + "\n";
              // 读取rawContactsId
              Cursor rawContactsIdCur = cr.query(RawContacts.CONTENT_URI,
             null,
             RawContacts.CONTACT_ID +" = ?",  
             new String[]{id}, null);
             
              if (rawContactsIdCur.moveToFirst())
              {
               rawContactsId = rawContactsIdCur.getString(rawContactsIdCur.getColumnIndex(RawContacts._ID));
               str += "RawContactsID:" + rawContactsId + "\n";
              }
              rawContactsIdCur.close();
             
              str += "姓名:" + name + "\n";
             
              /*
               Android文档:ContactsContract.CommonDataKinds.Phone:
            CONTENT_URI:The content:// style URI for all data records of the  CONTENT_ITEM_TYPE MIME type, combined with the associated  raw contact and aggregate contact data.
           */
             
              // 读取号码
              if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
              {
               //Uri phoneUri=Uri.parse("content://com.android.contacts/data/phones");
               // 下面的ContactsContract.CommonDataKinds.Phone.CONTENT_URI可以用phoneUri代替
               Cursor PhoneCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                   null,
                   //ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                   ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID +" = ?",
                   new String[]{rawContactsId}, null);
               while (PhoneCur.moveToNext())
               {
                String number = PhoneCur.getString(PhoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                String numberType = PhoneCur.getString(PhoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                str += numberType + ":" + number + "\n";
               }
               PhoneCur.close();
              }
             
              // 读取Email
              //Uri emailUri=Uri.parse("content://com.android.contacts/data/emails");
              // 下面的ContactsContract.CommonDataKinds.Email.CONTENT_URI可以用emailUri代替
              Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                      null,
                      ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                      new String[]{id}, null);
              while (emailCur.moveToNext())
              {   
                  String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                  String emailType = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                  str += emailType + ":" + email + "\n";
              }
              /*Email类型:
              1:TYPE_HOME
        2:TYPE_WORK
        3:TYPE_OTHER
        4:TYPE_MOBILE
              */
              emailCur.close();
             
              // 读取备注
              String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";   
              String[] noteWhereParams = new String[]{id, ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
              Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null);
              if (noteCur.moveToFirst())
              {
               String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));
               str += "备注:" + note + "\n";
              }
              noteCur.close();
             
              // 读取邮政地址
              String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
              String[] addrWhereParams = new String[]{id,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};
              Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, null, addrWhere, addrWhereParams, null);
              while(addrCur.moveToNext())
              {   
                  String poBox = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
                     String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
                     String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));   
                     String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));   
                     String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));   
                     String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));   
                     String type = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
                     
                     if (poBox != "")
                     {
                      str += "POBOX:" + poBox + "\n";
                     }
                     
                     if (street != "")
                     {
                      str += "STREET:" + street + "\n";
                     }
                     
                     if (city != "")
                     {
                      str += "CITY:" + city + "\n";
                     }
                     
                     if (state != "")
                     {
                      str += "REGION:" + state + "\n";
                     }
                     
                     if (postalCode != "")
                     {
                      str += "POSTCODE:" + postalCode + "\n";
                     }
                     
                     if (country != "")
                     {
                      str += "COUNTRY:" + country + "\n";
                     }
                     
                     if (type != "")
                     {
                      str += "TYPE:" + type + "\n";
                     }
              }
              addrCur.close();
             
              // 读取即时消息
              String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
              String[] imWhereParams = new String[]{id, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
              Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI,null, imWhere, imWhereParams, null);
              while(imCur.moveToNext())
              {
                  String imName = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
                  String imType = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL));
                  str += imType + ":" + imName + "\n";
              }
              imCur.close();
             
              // 读取公司及职位
              String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
                 String[] orgWhereParams = new String[]{id,ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
                 Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI,null, orgWhere, orgWhereParams, null);   
                 while (orgCur.moveToNext())
                 {
                     String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
                     String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
                     str += orgName + ":" + title + "\n";
                 }
                 orgCur.close();
                
                 str += "\n";
             }
            }
        }
    }

NewContactActivity:

package waga.android.study.TestContacts;
import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class NewContactActivity extends Activity
{
EditText edittext_name;
EditText edittext_number;
EditText edittext_email;
EditText edittext_qq;
Button btn_Save;
@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_contact);
        setTitle(R.string.menu_newContact);
        
        edittext_name = (EditText)findViewById(R.id.EditText_name);
        edittext_number = (EditText)findViewById(R.id.EditText_number);
        edittext_email = (EditText)findViewById(R.id.EditText_email);
        edittext_qq = (EditText)findViewById(R.id.EditText_qq);
        btn_Save =(Button)findViewById(R.id.Button_Save);
        
        edittext_name.setText("test-1");
        edittext_number.setText("13636431707-1");
        edittext_email.setText("[email]test1@sim.com[/email]");
        edittext_qq.setText("27015155-1");
        
        btn_Save.setOnClickListener(new Button.OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
          String strName = edittext_name.getText().toString();
          String strNumber = edittext_number.getText().toString();
          String strEmail = edittext_email.getText().toString();
          String strQQ = edittext_qq.getText().toString();
          
          // 新建联系人
          insert(strName, strNumber, strEmail, strQQ);
          
          // 结束activity
          finish();
         }
        });
    }

// 新建联系人
    public boolean insert(String given_name, String mobile_number, String work_email, String im_qq)
    {
     try
     {
      ContentValues values = new ContentValues();

      // 下面的操作会根据RawContacts表中已有的rawContactId使用情况自动生成新联系人的rawContactId
      Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
      long rawContactId = ContentUris.parseId(rawContactUri);
      
      // 向data表插入姓名数据
      if (given_name != "")
      {
       values.clear();
       values.put(Data.RAW_CONTACT_ID, rawContactId);
       values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
       values.put(StructuredName.GIVEN_NAME, given_name);
       getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
      }
      
      // 向data表插入电话数据
      if (mobile_number != "")
      {
       values.clear();
       values.put(Data.RAW_CONTACT_ID, rawContactId);
       values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
       values.put(Phone.NUMBER, mobile_number);
       values.put(Phone.TYPE, Phone.TYPE_MOBILE);
       getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
      }
      
      // 向data表插入Email数据
      if (work_email != "")
      {
       values.clear();
       values.put(Data.RAW_CONTACT_ID, rawContactId);
       values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
       values.put(Email.DATA, work_email);
       values.put(Email.TYPE, Email.TYPE_WORK);
       getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
      }
      
      // 向data表插入QQ数据
      if (im_qq != "")
      {
       values.clear();
       values.put(Data.RAW_CONTACT_ID, rawContactId);
       values.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
       values.put(Im.DATA, im_qq);
       values.put(Im.PROTOCOL, Im.PROTOCOL_QQ);
       getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
      }
     }
     
        catch (Exception e) 
        {
            return false;
        }
        return true;
} 
}

DeleteContactActivity:

package waga.android.study.TestContacts;
import android.app.Activity;
import android.content.ContentUris;
import android.os.Bundle;
import android.provider.ContactsContract.RawContacts;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class DeleteContactActivity extends Activity
{
EditText edittext_rawContactId;
Button btn_Delete;
@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.delete_contact);
        setTitle(R.string.menu_deleteContact);
        
        edittext_rawContactId = (EditText)findViewById(R.id.EditText_rawContactId);
        btn_Delete =(Button)findViewById(R.id.Button_Delete);
        
        btn_Delete.setOnClickListener(new Button.OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
          long rawContactId = Long.parseLong(edittext_rawContactId.getText().toString());
          
          // 新建联系人
          delete(rawContactId);
          
          // 结束activity
          finish();
         }
        });
    }

// 删除联系人
    public void delete(long rawContactId)
    {
     getContentResolver().delete(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null, null);
     //getContentResolver().delete(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, rawContactId), null, null);
    }
}

****************************
UpdateContactActivity:
package waga.android.study.TestContacts;
import android.app.Activity;
import android.content.ContentValues;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class UpdateContactActivity extends Activity
{
EditText edittext_rawContactId;
EditText edittext_NewNumber;
Button btn_Update;
@Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update_contact);
        setTitle(R.string.menu_updateContact);
        
        edittext_rawContactId = (EditText)findViewById(R.id.EditText_rawContactId_Delete);
        edittext_NewNumber = (EditText)findViewById(R.id.EditText_newNumber);
        btn_Update =(Button)findViewById(R.id.Button_Update);
        
        btn_Update.setOnClickListener(new Button.OnClickListener()
      {
         @Override
         public void onClick(View v)
         {
          String strRawContactId = edittext_rawContactId.getText().toString();
          String strNewNumber = edittext_NewNumber.getText().toString();
          
          // 更新联系人
          update(strRawContactId, strNewNumber);
          
          // 结束activity
          finish();
         }
        });
    }

// 更新联系人
    public void update(String rawRawContactId, String NewNumber)
    {
     ContentValues values = new ContentValues();
     values.put(Phone.NUMBER, NewNumber);
     values.put(Phone.TYPE, Phone.TYPE_MOBILE);
     
     String Where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
        String[] WhereParams = new String[]{rawRawContactId, Phone.CONTENT_ITEM_TYPE, };
        
     getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, Where, WhereParams);
    }
}


目录
相关文章
|
3天前
|
机器学习/深度学习 Java Shell
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
[RK3568][Android12.0]--- 系统自带预置第三方APK方法
19 0
|
3天前
|
程序员 Android开发
Android亮度调节的几种实现方法
Android亮度调节的几种实现方法
8 0
|
3天前
|
Shell Android开发
Android Activity重写dump方法实现通过adb调试代码
Android Activity重写dump方法实现通过adb调试代码
10 0
|
3天前
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
10 0
|
3天前
|
Android开发
Android中去掉ActionBar的几种方法
Android中去掉ActionBar的几种方法
10 0
|
18天前
|
安全 Java Shell
Android11以上 Audio音频调试方法
Android11以上 Audio音频调试方法
57 0
|
1月前
|
Android开发
Android调用相机与相册的方法2
Android调用相机与相册的方法
24 0
mqc
|
Android开发
Android开发中,那些让你相见恨晚的方法、类或接口
1.getParent().requestDisallowInterceptTouchEvent(true);剥夺父view 对touch 事件的处理权,谁用谁知道。 2.ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue); 用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。
mqc
3485 0
|
8天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
10天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比