Android读写联系人数据(内容提供者应用)

2024-06-11 18:58

本文主要是介绍Android读写联系人数据(内容提供者应用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载

先加二个读和写权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />

<uses-permission android:name="android.permission.WRITE_CONTACTS" />  

 

复制代码
package com.eboy.test;

import java.util.ArrayList;

import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;

public  class ContectTest  extends AndroidTestCase {
    
     private  static  final String TAG = "TestContact";
    
     // 查询所有联系人的姓名,电话,邮箱
     public  void TestContact()  throws Exception {        
        Uri uri = Uri.parse("content://com.android.contacts/contacts");
        ContentResolver resolver = getContext().getContentResolver();
        Cursor cursor = resolver.query(uri,  new String[]{"_id"},  nullnullnull);
         while (cursor.moveToNext()) {
             int contractID = cursor.getInt(0);
            StringBuilder sb =  new StringBuilder("contractID=");
            sb.append(contractID);
            uri = Uri.parse("content://com.android.contacts/contacts/" + contractID + "/data");
            Cursor cursor1 = resolver.query(uri,  new String[]{"mimetype", "data1", "data2"},  nullnullnull);
             while (cursor1.moveToNext()) {
                String data1 = cursor1.getString(cursor1.getColumnIndex("data1"));
                String mimeType = cursor1.getString(cursor1.getColumnIndex("mimetype"));
                 if ("vnd.android.cursor.item/name".equals(mimeType)) {  // 是姓名
                    sb.append(",name=" + data1);
                }  else  if ("vnd.android.cursor.item/email_v2".equals(mimeType)) {  // 邮箱
                    sb.append(",email=" + data1);
                }  else  if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) {  // 手机
                    sb.append(",phone=" + data1);
                }                
            }
            cursor1.close();
            Log.i(TAG, sb.toString());
        }
        cursor.close();
    }
    
     // 查询指定电话的联系人姓名,邮箱
     public  void testContactNameByNumber()  throws Exception {
        String number = "18052369652";
        Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);
        ContentResolver resolver = getContext().getContentResolver();
        Cursor cursor = resolver.query(uri,  new String[]{"display_name"},  nullnullnull);
         if (cursor.moveToFirst()) {
            String name = cursor.getString(0);
            Log.i(TAG, name);
        }
        cursor.close();
    }
    
     // 添加联系人,使用事务
     public  void testAddContact()  throws Exception {
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        ContentResolver resolver = getContext().getContentResolver();
        ArrayList<ContentProviderOperation> operations =  new ArrayList<ContentProviderOperation>();
        ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
            .withValue("account_name",  null)
            .build();
        operations.add(op1);
        
        uri = Uri.parse("content://com.android.contacts/data");
        ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
            .withValueBackReference("raw_contact_id", 0)
            .withValue("mimetype", "vnd.android.cursor.item/name")
            .withValue("data2", "龚小永")
            .build();
        operations.add(op2);
        
        ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
            .withValueBackReference("raw_contact_id", 0)
            .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
            .withValue("data1", "13539777967")            
            .withValue("data2", "2")
            .build();
        operations.add(op3);
        
        ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)
        .withValueBackReference("raw_contact_id", 0)
        .withValue("mimetype", "vnd.android.cursor.item/email_v2")
        .withValue("data1", "asdfasfad@163.com")            
        .withValue("data2", "2")
        .build();
    operations.add(op4);
        
        resolver.applyBatch("com.android.contacts", operations);
    }
    
复制代码


/Files/jxgxy/ReadWriteContact.rar

转载:Android读写联系人数据(内容提供者应用) 

布局文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
     xmlns:tools = "http://schemas.android.com/tools"
     android:id = "@+id/ll"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
     android:orientation = "vertical"
     android:paddingBottom = "@dimen/activity_vertical_margin"
     android:paddingLeft = "@dimen/activity_horizontal_margin"
     android:paddingRight = "@dimen/activity_horizontal_margin"
     android:paddingTop = "@dimen/activity_vertical_margin"
     tools:context = ".MainActivity" >
     < LinearLayout
         android:layout_width = "match_parent"
         android:layout_height = "wrap_content" >
         < Button
             android:id = "@+id/btn_getcontacts"
             android:layout_width = "0dp"
             android:layout_height = "wrap_content"
             android:onClick = "read_click"
             android:layout_weight = "1"
             android:text = "读取联系人" />
         < Button
             android:id = "@+id/btn_insertcontact"
             android:layout_width = "0dp"
             android:layout_height = "wrap_content"
             android:onClick = "insert_click"
             android:layout_weight = "1"
             android:text = "写入联系人" />
     </ LinearLayout >
</ LinearLayout >

核心Activity 两种方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package com.example.readcontacts;
import java.util.ArrayList;
import java.util.List;
import com.pas.domain.ContactModel;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity  extends Activity
{
     LinearLayout ll;
     @Override
     protected void onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ll = (LinearLayout) findViewById(R.id.ll);
     }
     @Override
     public boolean onCreateOptionsMenu(Menu menu)
     {
         // Inflate the menu; this adds items to the action bar if it is present.
         getMenuInflater().inflate(R.menu.main, menu);
         return true ;
     }
     public void read_click(View view)
     {
         getContactList();
     }
     public void insert_click(View view)
     {
         addContact();
         Toast.makeText( this "添加成功" , Toast.LENGTH_LONG).show();
     }
     private void addContact()
     {
         ContentResolver resolver = getContentResolver();
         ArrayList<ContentProviderOperation> operations= new ArrayList<ContentProviderOperation>();
         
         Uri raw_contacts_uri = Uri.parse( "content://com.android.contacts/raw_contacts" );
         Uri data_uri = Uri.parse( "content://com.android.contacts/data" );
         
         ContentProviderOperation op1=ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                 .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null )
                 .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null ).build();
         operations.add(op1);
         
         ContentProviderOperation op2=ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,  0 )
                 .withValue(ContactsContract.Data.MIMETYPE,
                         ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                 .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,  "王刚" )
                 .build();
         operations.add(op2);
         
         ContentProviderOperation op3=ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,  0 )
                 .withValue(ContactsContract.Data.MIMETYPE,
                         ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                 .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,  "990009" )
                 .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
                 .build();
         
         operations.add(op3);
         
         ContentProviderOperation op4=ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,  0 )
                 .withValue(ContactsContract.Data.MIMETYPE,
                         ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
                 .withValue(ContactsContract.CommonDataKinds.Email.DATA,  "ping@12.com" )
                 .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM)
                 .build();
         operations.add(op4);
         
         try
             resolver.applyBatch(ContactsContract.AUTHORITY, operations); 
         catch (Exception e) { 
             e.printStackTrace();
        
         
//      ContentValues raw_values = new ContentValues();
//
//      Cursor cursor = resolver.query(raw_contacts_uri, new String[]
//      { "_id" }, null, null, null);
//      cursor.moveToLast();
//      int lastid = cursor.getInt(0);
//      int newid = lastid + 1;
//
//      raw_values.put("contact_id", newid);
//      resolver.insert(raw_contacts_uri, raw_values);
//
//      // 电话插入
//      ContentValues phonevalues = new ContentValues();
//      phonevalues.put("data1", "898989");
//      phonevalues.put("mimetype", "vnd.android.cursor.item/phone_v2");
//      phonevalues.put("raw_contact_id", newid);
//      resolver.insert(data_uri, phonevalues);
//
//      // email插入
//      ContentValues emailvalues = new ContentValues();
//      emailvalues.put("data1", "ping@126.com");
//      emailvalues.put("mimetype", "vnd.android.cursor.item/email_v2");
//      emailvalues.put("raw_contact_id", newid);
//      resolver.insert(data_uri, emailvalues);
//
//      // name插入
//      ContentValues namevalues = new ContentValues();
//      namevalues.put("data1", "王刚");
//      namevalues.put("mimetype", "vnd.android.cursor.item/name");
//      namevalues.put("raw_contact_id", newid);
//      resolver.insert(data_uri, namevalues);
     }
     private void getContactList()
     {
         ContentResolver resolver = getContentResolver();
         Uri raw_contacts_uri = Uri.parse( "content://com.android.contacts/raw_contacts" );
         Uri data_uri = Uri.parse( "content://com.android.contacts/data" );
         ll.removeAllViews();
         Cursor cursor = resolver.query(raw_contacts_uri,  null null null null );
         while (cursor.moveToNext())
         {
             String contactid = cursor.getString(cursor.getColumnIndex( "contact_id" ));
             System.out.println(contactid +  "\n" );
             if ( null != contactid)
             {
                 StringBuffer sb =  new StringBuffer( "联系人ID:" );
                 sb.append(contactid).append( " " );
                 Cursor data_cursor = resolver.query(data_uri,  null "raw_contact_id=?" new String[]
                 { contactid },  null );
                 while (data_cursor.moveToNext())
                 {
                     String data1 = data_cursor.getString(data_cursor.getColumnIndex( "data1" ));
                     String mimetype = data_cursor.getString(data_cursor.getColumnIndex( "mimetype" ));
                     System.out.println( "mimetype=" + mimetype +  ";data1=" + data1);
                     sb.append(data1).append( " " );
                 }
                 data_cursor.close();
                 TextView tv =  new TextView( this );
                 LinearLayout.LayoutParams lp =  new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                 tv.setLayoutParams(lp);
                 tv.setText(sb.toString());
                 ll.addView(tv);
             }
         }
         cursor.close();
     }
}

这篇关于Android读写联系人数据(内容提供者应用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052009

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现