android 4组件之 provider--访问通讯录
16lz
2021-01-24
a
provider是一个组件需要在清单中配置,和activity是并列的关系。
android:authorities是内容提供者的唯一标示,其他应用根据这个找到这个内容提供者。
b.
访问联系人的provider
ContactTest.java
配置权限
android provider
参考itcast,谢谢作者
provider是一个组件需要在清单中配置,和activity是并列的关系。
android:authorities是内容提供者的唯一标示,其他应用根据这个找到这个内容提供者。
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provides.personprovider"/>
b.
访问联系人的provider
ContactTest.java
package cn.itcast.contact;import java.util.ArrayList;import android.content.ContentProviderOperation;import android.content.ContentProviderResult;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.provider.ContactsContract;import android.provider.ContactsContract.RawContacts;import android.provider.ContactsContract.CommonDataKinds.Email;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.Contacts.Data;import android.test.AndroidTestCase;import android.util.Log;public class ContactTest extends AndroidTestCase {private static final String TAG = "ContactTest";//获取通信录中所有的联系人public void testGetContacts() throws Throwable{ContentResolver contentResolver = this.getContext().getContentResolver();Uri uri = Uri.parse("content://com.android.contacts/contacts");Cursor cursor = contentResolver.query(uri, null, null, null, null);while(cursor.moveToNext()){StringBuilder sb = new StringBuilder();String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); //得到id String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));//得到namesb.append("contactId=").append(contactId).append(",name=").append(name);//查询电话号码Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); while(phones.moveToNext()){String phone = phones.getString(phones.getColumnIndex("data1")); sb.append(",phone=").append(phone);}//查询邮件Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); while(emails.moveToNext()){String email = emails.getString(emails.getColumnIndex("data1")); sb.append(",email=").append(email);}Log.i(TAG, sb.toString());}}/** * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 */public void testInsert() {ContentValues values = new ContentValues();//首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);long rawContactId = ContentUris.parseId(rawContactUri);//往data表入姓名数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型values.put(StructuredName.GIVEN_NAME, "李天山");this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表入电话数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);values.put(Phone.NUMBER, "13921009789");values.put(Phone.TYPE, Phone.TYPE_MOBILE);this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表入Email数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);values.put(Email.DATA, "liming@itcast.cn");values.put(Email.TYPE, Email.TYPE_WORK);this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);}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, "liming@itcast.cn") .withValue(Email.TYPE, Email.TYPE_WORK) .build());ContentProviderResult[] results = this.getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);for(ContentProviderResult result : results){Log.i(TAG, result.uri.toString());}}}调用
ContactTest contact =new ContactTest(this); ArrayList<HashMap<String, Object>> persons = null ; try { persons = contact.GetContacts();for(int i=0;i<persons.size();i++){ HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.ic_launcher);//图像资源的ID map.put("ItemTitle",(String) persons.get(i).get("name")); map.put("ItemText", (String) persons.get(i).get("phone")); mArrayList.add(map);}} catch (Throwable e) {// TODO Auto-generated catch blocke.printStackTrace();}
配置权限
<uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" />
android provider
参考itcast,谢谢作者
更多相关文章
- 【Android(安卓)开发教程】数据共享
- android之XmlResourceParser类使用实例
- Android的activity的title设定内容
- Android(安卓)获取GPS和网络定位信息
- Android(安卓)dialog 去除虚拟按键的解决方法
- Android(安卓)安卓微信分享
- 来电防火墙——学习记录
- 我的第一个python脚本
- Android(安卓)系统应用调用,intent的使用总结帖