Android中ContentProvider实现联系人的读写

来源:互联网 发布:中国移动宽带测速软件 编辑:程序博客网 时间:2024/05/16 07:49
1.修改menu/main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/item_add"        android:orderInCategory="100"        android:showAsAction="never"        android:title="添加"/><item        android:id="@+id/item_exit"        android:orderInCategory="100"        android:showAsAction="never"        android:title="退出"/></menu>
2.修改界面布局activity_main.xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    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" >    <TextView        android:id="@+id/textview_userInfo"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" /></RelativeLayout>
3.编码实现MainActivity
import android.app.Activity;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.database.Cursor;import android.graphics.Color;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract.CommonDataKinds;import android.provider.ContactsContract.CommonDataKinds.Email;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.Contacts;import android.provider.ContactsContract.Data;import android.provider.ContactsContract.RawContacts;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {TextView userInfoTextView;MenuItem addItem;MenuItem exitItem;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);userInfoTextView=(TextView) findViewById(R.id.textview_userInfo);addItem=(MenuItem) findViewById(R.id.item_add);exitItem=(MenuItem) findViewById(R.id.item_exit);//调用getContactInfo()方法获取联系人的信息String result=getContactInfo();userInfoTextView.setTextColor(Color.BLUE);userInfoTextView.setText("记录\t名字\t电话\n"+result);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch(item.getItemId()){case R.id.item_add:addContact();String result=getContactInfo();userInfoTextView.setTextColor(Color.BLUE);userInfoTextView.setText("记录\t名字\t电话\n"+result);break;case R.id.item_exit:MainActivity.this.finish();}return true;}public String getContactInfo(){String result="";ContentResolver resolver=getContentResolver();//查询联系人Cursor cursor=resolver.query(Contacts.CONTENT_URI, null, null, null, null);int idIndex=cursor.getColumnIndex(Contacts._ID);// 取得联系人名字 (显示出来的名字),实际内容在 ContactsContract.Contacts中int nameIndex=cursor.getColumnIndex(Contacts.DISPLAY_NAME);for (cursor.moveToFirst();(!cursor.isAfterLast());cursor.moveToNext()) {//获取联系人IDString contactId =cursor.getString(idIndex);result=result+contactId+"\t\t\t";result=result+cursor.getString(nameIndex)+"\t\t\t"; // 根据联系人ID查询对应的电话号码              Cursor phoneNumbers = resolver.query(CommonDataKinds.Phone.CONTENT_URI, null,            CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);               // 取得电话号码(可能存在多个号码)                while (phoneNumbers.moveToNext())                 {                  String strPhoneNumber = phoneNumbers.getString(phoneNumbers.getColumnIndex(CommonDataKinds.Phone.NUMBER));                     result=result+strPhoneNumber+"\t\t\t";            }            phoneNumbers.close();// 根据联系人ID查询对应的email              Cursor emails = resolver.query(CommonDataKinds.Email.CONTENT_URI, null,             CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null);                           // 取得email(可能存在多个email)                while (emails.moveToNext())                 {                  String strEmail = emails.getString(emails.getColumnIndex(CommonDataKinds.Email.DATA));                     result=result+strEmail+"\t\t\t";            }                 emails.close();             result=result+"\n";}cursor.close();return result;}public void addContact(){// 创建一个空的ContentValues          ContentValues values = new ContentValues();          // 向RawContacts.CONTENT_URI执行一个空值插入,          // 目的是获取系统返回的rawContactId           Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);         long rawContactId = ContentUris.parseId(rawContactUri);          values.clear();                  values.put(Data.RAW_CONTACT_ID, rawContactId);           // 设置内容类型          values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);         // 设置联系人名字          values.put(StructuredName.GIVEN_NAME, "jCuckoo");        // 向联系人URI添加联系人名字          getContentResolver().insert(Data.CONTENT_URI, values);          values.clear();                        values.put(Data.RAW_CONTACT_ID, rawContactId);          values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);          // 设置联系人的电话号码          values.put(Phone.NUMBER, "1234567890");          // 设置电话类型          values.put(Phone.TYPE, Phone.TYPE_MOBILE);          // 向联系人电话号码URI添加电话号码          getContentResolver().insert(Data.CONTENT_URI, values);          values.clear();                          values.put(Data.RAW_CONTACT_ID, rawContactId);          values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);          // 设置联系人的Email地址          values.put(Email.DATA, "cc@qq.com");          // 设置该电子邮件的类型          values.put(Email.TYPE, Email.TYPE_WORK);          // 向联系人Email URI添加Email数据          getContentResolver().insert(Data.CONTENT_URI, values);          Toast.makeText(MainActivity.this , "联系人数据添加成功" , 8000) .show();  }}
4.修改AndroidManifest.xml联系人读写权限
<uses-permission android:name="android.permission.READ_CONTACTS"/><uses-permission android:name="android.permission.WRITE_CONTACTS"/>  
原创粉丝点击