Android 简单联系人操作

Android中的Contacts联系人通过ContentProvider对外提供联系人数据及操作接口。

下面通过简单例子,来看看有关联系人的基本操作。

主Activity:
001 public class MainActivity extends ListActivity { 
002     private ArrayList<String> list = new ArrayList<String>(); 
003     private ArrayAdapter adapter; 
004     /** Called when the activity is first created. */ 
005     @Override 
006     public void onCreate(Bundle savedInstanceState) { 
007         super.onCreate(savedInstanceState); 
008         insert(); 
009         queryByName(); 
010         queryAll(); 
011         adapter = new ArrayAdapter(this,R.layout.main,list); 
012         this.setListAdapter(adapter); 
013     
014     //查询所有联系人   
015     public void queryAll() {   
016         ContentResolver resolver = this.getContentResolver();   
017         Uri uri = Uri.parse("content://com.android.contacts/contacts");   
018         Cursor idCursor = resolver.query(uri, new String[] { "_id" }, nullnull,null);  
019         while (idCursor.moveToNext()) {  
020             //获取到raw_contacts表中的id   
021             int id = idCursor.getInt(0);    
022             //根据获取到的ID查询data表中的数据   
023             uri = Uri.parse("content://com.android.contacts/contacts/" + id +"/data");   
024             Cursor dataCursor = resolver.query(uri, new String[] { "data1","mimetype" }, nullnullnull);   
025             StringBuilder sb = new StringBuilder();   
026             sb.append("id=" + id);   
027             //查询联系人表中的 
028             while (dataCursor.moveToNext()) {   
029                 String data = dataCursor.getString(0);   
030                 String type = dataCursor.getString(1);   
031                 if ("vnd.android.cursor.item/name".equals(type))   
032                     sb.append(", name=" + data);   
033                 else if ("vnd.android.cursor.item/phone_v2".equals(type))   
034                     sb.append(", phone=" + data);   
035                 else if ("vnd.android.cursor.item/email_v2".equals(type))   
036                     sb.append(", email=" + data);   
037             }  
038             list.add(sb.toString()); 
039         }   
040     }  
041     //根据电话号码查询联系人名称   
042     private void queryByName() {   
043         ContentResolver resolver = this.getContentResolver();   
044         Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/1234567");   
045         Cursor c = resolver.query(uri, new String[] { "display_name" }, nullnull,null);   
046         while (c.moveToNext()) {   
047             System.out.println(c.getString(0));   
048         }   
049     }   
050     //添加联系人   
051     private void insert() {   
052         ContentResolver resolver = this.getContentResolver();   
053         Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");   
054         ContentValues values = new ContentValues();   
055         //向raw_contacts插入一条除了ID之外, 其他全部为NULL的记录, ID是自动生成的   
056         long id = ContentUris.parseId(resolver.insert(uri, values));    
057            
058         //添加联系人姓名   
059         uri = Uri.parse("content://com.android.contacts/data");   
060         values.put("raw_contact_id", id);   
061         values.put("data2""zhang xiangdong");   
062         values.put("mimetype""vnd.android.cursor.item/name");   
063         resolver.insert(uri, values);   
064            
065         //添加联系人电话   
066         values.clear(); // 清空上次的数据   
067         values.put("raw_contact_id", id);   
068         values.put("data1""1392315698");   
069         values.put("data2""2");   
070         values.put("mimetype""vnd.android.cursor.item/phone_v2");   
071         resolver.insert(uri, values);   
072            
073         //添加联系人邮箱   
074         values.clear();   
075         values.put("raw_contact_id", id);   
076         values.put("data1""345672@qq.com");   
077         values.put("data2""1");   
078         values.put("mimetype""vnd.android.cursor.item/email_v2");   
079         resolver.insert(uri, values);   
080     
081     //使用事务添加联系人   
082     private void insertWithBatch() throws Exception {   
083         ContentResolver resolver = this.getContentResolver();   
084          
085         ArrayList<ContentProviderOperation> operations = newArrayList<ContentProviderOperation>();   
086            
087         //插入id 
088         ContentProviderOperation operation1 = ContentProviderOperation    
089                 .newInsert(Uri.parse("content://com.android.contacts/raw_contacts"))    
090                 .withValue("_id"null)   
091                 .build();   
092         operations.add(operation1);   
093         //插入姓名 
094         ContentProviderOperation operation2 = ContentProviderOperation    
095                 .newInsert(Uri.parse("content://com.android.contacts/data"))    
096                 .withValueBackReference("raw_contact_id"0)   
097                 .withValue("data2""JOhn")   
098                 .withValue("mimetype""vnd.android.cursor.item/name")   
099                 .build();   
100         operations.add(operation2);   
101         //插入联系人电话 
102         ContentProviderOperation operation3 = ContentProviderOperation   
103                 .newInsert(Uri.parse("content://com.android.contacts/data"))    
104                 .withValueBackReference("raw_contact_id"0)   
105                 .withValue("data1""135124689745")   
106                 .withValue("data2""2")   
107                 .withValue("mimetype""vnd.android.cursor.item/phone_v2")    
108                 .build();   
109         operations.add(operation3);   
110         //插入邮箱 
111         ContentProviderOperation operation4 = ContentProviderOperation  
112                 .newInsert(Uri.parse("content://com.android.contacts/data"))    
113                 .withValueBackReference("raw_contact_id"0)   
114                 .withValue("data1""123568974@qq.com")    
115                 .withValue("data2""2")  
116                 .withValue("mimetype""vnd.android.cursor.item/email_v2")    
117                 .build();   
118         operations.add(operation4);   
119          
120         //执行批量操作 
121         resolver.applyBatch("com.android.contacts", operations);   
122     }   
123 }
布局文件:
1 <?xml version="1.0" encoding="utf-8"?> 
2 <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
3     android:layout_width="fill_parent" 
4     android:layout_height="wrap_content" 
5     android:text="@string/hello" 
6     />
描述文件:
01 <?xml version="1.0" encoding="utf-8"?> 
02 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
03       package="com.test.contacts" 
04       android:versionCode="1" 
05       android:versionName="1.0"
06     <uses-sdk android:minSdkVersion="10" /> 
07     <strong><uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission
08     <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission></strong
09     <application android:icon="@drawable/icon" android:label="@string/app_name"
10         <activity android:name=".MainActivity" 
11                   android:label="@string/app_name"
12             <intent-filter
13                 <action android:name="android.intent.action.MAIN" /> 
14                 <category android:name="android.intent.category.LAUNCHER" /> 
15             </intent-filter
16         </activity
17    
18     </application
19 </manifest>
运行结果: 
Android 简单联系人操作
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值