现在的位置: 首页 > 综合 > 正文

基于Android2.2的联系人的基本操作

2013年10月05日 ⁄ 综合 ⁄ 共 15676字 ⁄ 字号 评论关闭

 TestContacts.rar (68.47
KB, 下载次数: 398)
 



前段时间公司要求我组织个通信录方面的培训,我集中研究了下基于Android2.2的联系人的基本操作,现在将成果发出来和大家一起交流下,供对通信录感兴趣的朋友学习。


Activty部分:

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("test1@sim.com");

        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);

    }

}


**********************

end


运行结果:

读取联系人:
新建 Bitmap 图像.bmp 


新建联系人:
新建 Bitmap 图像.bmp 


删除联系人:
新建 Bitmap 图像.bmp 


更新联系人:
新建 Bitmap 图像.bmp 

抱歉!评论已关闭.