Android中ContentProvider实现联系人的读写

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;
	@Override
	protected 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);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	@Override
	public 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()) {
			//获取联系人ID
			String 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, "[email protected]");  
        // 设置该电子邮件的类型  
        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"/>  

你可能感兴趣的:(Android中ContentProvider实现联系人的读写)