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


 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 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值