操作android中的通讯录
16lz
2021-01-23
android中的通讯录Contacts,在数据库中主要涉及到contact表,raw_contacts,data表
1,读取contact中的数据(通过测试用例的方法来演示)
(1),创建测试方法
(2),在AndroidManifest.xml配置对测试用例的支持
方法:在
<application>
<activity>
之间加入<uses-library android:name="android.test.runner" />
(3),设置访问通讯录的权限:
在AndroidManifest.xml配置如下:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
(4),通过ContentResolver来访问通讯录的contentprovider
代码如下:
AndroidManiFest.xml配置:
测试用例:
向通讯录中添加数据
1,非事务
引用
1,读取contact中的数据(通过测试用例的方法来演示)
(1),创建测试方法
(2),在AndroidManifest.xml配置对测试用例的支持
方法:在
<application>
<activity>
之间加入<uses-library android:name="android.test.runner" />
(3),设置访问通讯录的权限:
在AndroidManifest.xml配置如下:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
(4),通过ContentResolver来访问通讯录的contentprovider
代码如下:
AndroidManiFest.xml配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.com.simon.junit" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"><uses-library android:name="android.test.runner" /> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.READ_CONTACTS" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.com.simon.junit" android:label="my test class" /></manifest>
测试用例:
package cn.com.simon.junit;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.test.AndroidTestCase;import android.util.Log;public class TestContacts extends AndroidTestCase{private static final String TAG = "TestContacts";/** * 查询通讯录中的信息 * @throws Throwable */public void queryContacts() throws Throwable{//获得contentresolver对象ContentResolver resolver = this.getContext().getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/contacts");//localhost="com.android.contacts"Cursor c = resolver.query(uri, null, null, null, null);Log.i(TAG, c.getCount()+"");}}
向通讯录中添加数据
1,非事务
引用
/** * 非事务的方式添加通讯录,插入数据的操作不在同一个事务中 * * @throws Throwable */public void addContact() throws Throwable {// 先向raw_contacts表中添加一条空记录,因为表中主要是存储的联系人的id// data表中主要是存储的联系人的信息,所以我们要先获得新增的联系人的id,id为自动增长ContentResolver resolver = this.getContext().getContentResolver();ContentValues values = new ContentValues();// 参数集合Uri url = resolver.insert(RawContacts.CONTENT_URI, values);// 插入空记录long id = ContentUris.parseId(url);// 往data表入姓名数据values.clear();values.put(Data.RAW_CONTACT_ID, id);// idvalues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 内容类型values.put(StructuredName.GIVEN_NAME, "黄根华");// 添加姓名resolver.insert(ContactsContract.Data.CONTENT_URI, values);// 往data表入电话数据values.clear();// 清空values中的数据values.put(Data.RAW_CONTACT_ID, id);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);values.put(Phone.NUMBER, "13921009789");values.put(Phone.TYPE, Phone.TYPE_MOBILE);resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI,values);// 往data表入Email数据values.clear();values.put(Data.RAW_CONTACT_ID, id);values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);values.put(Email.DATA, "[email protected]");values.put(Email.TYPE, Email.TYPE_WORK);resolver.insert(android.provider.ContactsContract.Data.CONTENT_URI,values);}/** * 向通讯录中添加数据,所有的操作在同一个事务中 * @throws Throwable */public void testSave() throws Throwable {// 文档位置:reference\android\provider\ContactsContract.RawContacts.htmlArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();int rawContactInsertIndex = 0;ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null).build());// 文档位置:reference\android\provider\ContactsContract.Data.htmlops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE).withValue(StructuredName.GIVEN_NAME, "赵薇").build());ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER, "13671323809").withValue(Phone.TYPE, Phone.TYPE_MOBILE).withValue(Phone.LABEL, "手机号").build());ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE).withValue(Email.DATA, "[email protected]").withValue(Email.TYPE, Email.TYPE_WORK).build());this.getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);}
更多相关文章
- Android 数据存储之SQLite数据库存储
- Android数据解析出错com.android.volley.NoConnectionError: jav
- 引用第三方进行Android前端与web后台的数据交互
- Android 调用UVCCamera 采集UVC摄像头数据,并调用zxing 扫码库扫
- 【android】SQLite数据库之SQLiteOpenHelper与SQLiteDatabase
- android中数据库框架 GreenDao