zoukankan      html  css  js  c++  java
  • 增加联系人到通讯录

    直接上代码:

    管理通讯录的类:ManagerContact.java

    package com.example.contactdemo;
    
    import java.util.ArrayList;
    import android.content.ContentProviderOperation;
    import android.content.ContentResolver;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.CommonDataKinds.Email;
    import android.provider.ContactsContract.CommonDataKinds.Note;
    import android.provider.ContactsContract.CommonDataKinds.Organization;
    import android.provider.ContactsContract.CommonDataKinds.Phone;
    import android.provider.ContactsContract.CommonDataKinds.StructuredName;
    import android.provider.ContactsContract.CommonDataKinds.Website;
    import android.provider.ContactsContract.Data;
    import android.provider.ContactsContract.RawContacts;
    import android.util.Log;
    
    /**
     * 管理通讯录的类
     * @author Willen
     *
     */
    
    
    public class ManagerContact {
    
    	// 根据姓名删除联系人
    	public void delContact(Context context, String name) {
    
    		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
    				new String[] { Data.RAW_CONTACT_ID },
    
    				ContactsContract.Contacts.DISPLAY_NAME + "=?",
    				new String[] { name }, null);
    
    		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    
    		if (cursor.moveToFirst()) {
    			do {
    				long Id = cursor.getLong(cursor
    						.getColumnIndex(Data.RAW_CONTACT_ID));
    
    				ops.add(ContentProviderOperation
    						.newDelete(
    								ContentUris.withAppendedId(
    										RawContacts.CONTENT_URI, Id)).build());
    				try {
    					context.getContentResolver().applyBatch(
    							ContactsContract.AUTHORITY, ops);
    				} catch (Exception e) {
    				}
    			} while (cursor.moveToNext());
    			cursor.close();
    		}
    	}
    
    	// 根据号码删除联系人
    	public void delContactByNumber(Context context, String number) {
    
    		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
    				new String[] { Data.RAW_CONTACT_ID },
    
    				ContactsContract.Contacts.Data.DATA1 + "=?",
    				new String[] { number }, null);
    
    		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    
    		if (cursor.moveToFirst()) {
    			do {
    				long Id = cursor.getLong(cursor
    						.getColumnIndex(Data.RAW_CONTACT_ID));
    
    				ops.add(ContentProviderOperation
    						.newDelete(
    								ContentUris.withAppendedId(
    										RawContacts.CONTENT_URI, Id)).build());
    				try {
    					context.getContentResolver().applyBatch(
    							ContactsContract.AUTHORITY, ops);
    				} catch (Exception e) {
    				}
    			} while (cursor.moveToNext());
    			cursor.close();
    		}
    	}
    
    	// 根据姓名更新联系人
    	public boolean updateContact(Context context, String oldname, String name,
    			String phone, String email, String website, String organization,
    			String note) {
    		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
    				new String[] { Data.RAW_CONTACT_ID },
    
    				ContactsContract.Contacts.DISPLAY_NAME + "=?",
    				new String[] { oldname }, null);
    		if (!cursor.moveToFirst()) {
    			return false;
    		}
    		String id = cursor
    				.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
    		cursor.close();
    		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?"
    								+ " AND " + Phone.TYPE + "=?",
    						new String[] { String.valueOf(id),
    								Phone.CONTENT_ITEM_TYPE,
    								String.valueOf(Phone.TYPE_HOME) })
    				.withValue(Phone.NUMBER, phone).build());
    
    		// 更新email
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?"
    								+ " AND " + Email.TYPE + "=?",
    						new String[] { String.valueOf(id),
    								Email.CONTENT_ITEM_TYPE,
    								String.valueOf(Email.TYPE_HOME) })
    				.withValue(Email.DATA, email).build());
    
    		// 更新姓名
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								StructuredName.CONTENT_ITEM_TYPE })
    				.withValue(StructuredName.DISPLAY_NAME, name).build());
    
    		// 更新网站
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								Website.CONTENT_ITEM_TYPE })
    				.withValue(Website.URL, website).build());
    
    		// 更新公司
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								Organization.CONTENT_ITEM_TYPE })
    				.withValue(Organization.COMPANY, organization).build());
    
    		// 更新note
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								Note.CONTENT_ITEM_TYPE })
    				.withValue(Note.NOTE, note).build());
    
    		try {
    			context.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
    					ops);
    			return true;
    		} catch (Exception e) {
    			return false;
    		}
    	}
    
    	// 根据号码更新联系人
    	public boolean updateContactByNumber(Context context, String number,
    			String name, String phone, String email, String website,
    			String organization, String note) {
    		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
    				new String[] { Data.RAW_CONTACT_ID },
    				ContactsContract.Contacts.Data.DATA1 + "=?",
    				new String[] { number }, null);
    		if (!cursor.moveToFirst()) {
    			Log.e("InsertContact", "updateContactByNumber");
    			InsertContact(context, name, number);
    			return false;
    		}
    		String id = cursor
    				.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
    		cursor.close();
    		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?"
    								+ " AND " + Phone.TYPE + "=?",
    						new String[] { String.valueOf(id),
    								Phone.CONTENT_ITEM_TYPE,
    								String.valueOf(Phone.TYPE_HOME) })
    				.withValue(Phone.NUMBER, phone).build());
    
    		// 更新email
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?"
    								+ " AND " + Email.TYPE + "=?",
    						new String[] { String.valueOf(id),
    								Email.CONTENT_ITEM_TYPE,
    								String.valueOf(Email.TYPE_HOME) })
    				.withValue(Email.DATA, email).build());
    
    		// 更新姓名
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								StructuredName.CONTENT_ITEM_TYPE })
    				.withValue(StructuredName.DISPLAY_NAME, name).build());
    
    		// 更新网站
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								Website.CONTENT_ITEM_TYPE })
    				.withValue(Website.URL, website).build());
    
    		// 更新公司
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								Organization.CONTENT_ITEM_TYPE })
    				.withValue(Organization.COMPANY, organization).build());
    
    		// 更新note
    		ops.add(ContentProviderOperation
    				.newUpdate(ContactsContract.Data.CONTENT_URI)
    				.withSelection(
    						Data.RAW_CONTACT_ID + "=?" + " AND "
    								+ ContactsContract.Data.MIMETYPE + " = ?",
    						new String[] { String.valueOf(id),
    								Note.CONTENT_ITEM_TYPE })
    				.withValue(Note.NOTE, note).build());
    
    		try {
    			context.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
    					ops);
    			return true;
    		} catch (Exception e) {
    			return false;
    		}
    	}
    
    	// 添加联系人
    	public void InsertContact(Context context, String name, String phone) {
    		ContentResolver resolver = context.getContentResolver();
    		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
    		ContentValues values = new ContentValues();
    		// 向raw_contacts插入一条除了ID之外, 其他全部为NULL的记录, ID是自动生成的
    		long id = ContentUris.parseId(resolver.insert(uri, values));
    		// 添加联系人姓名
    		uri = Uri.parse("content://com.android.contacts/data");
    		values.put("raw_contact_id", id);
    		values.put("data2", name);
    		values.put("mimetype", "vnd.android.cursor.item/name");
    		resolver.insert(uri, values);
    		// 添加联系人电话
    		values.clear(); // 清空上次的数据
    		values.put("raw_contact_id", id);
    		values.put("data1", phone);
    		values.put("data2", "2");
    		values.put("mimetype", "vnd.android.cursor.item/phone_v2");
    		resolver.insert(uri, values);
    	}
    	
    	//判断联系人是否在通讯录内
    	public boolean getContactPeople(Context context,String incomingNumber)
        {
            ContentResolver contentResolver = context.getContentResolver();
            Cursor cursor = null;
            
            String[] projection = new String[]
            {
                ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER
            };
    
            cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, 
            ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]
            { incomingNumber }, "");
            if(cursor.getCount() == 0)
            {
                return true;
            }
            return false;
        }
    }
    


    MainActivity.java

    package com.example.contactdemo;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    	Context context;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		context = this;
    		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				ManagerContact managerContact = new ManagerContact();
    				String phone = "15992470000";
    				if (!managerContact.getContactPeople(context, phone)) {
    					Toast.makeText(context, "本地通讯录已包此人信息", Toast.LENGTH_SHORT).show();
    				}else {
    					managerContact.InsertContact(context, "aa", phone);
    					Toast.makeText(context, "添加成功!", Toast.LENGTH_SHORT).show();
    				}
    				
    			}
    		});
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.activity_main, menu);
    		return true;
    	}
    
    }
    


    布局文件只有一个button。资源:http://download.csdn.net/detail/viviwen123/5194623

  • 相关阅读:
    MFC单文档视图设置背景
    原来这就是命令行下的“学生信息管理系统”
    C语言中数组&取地址的问题
    《逐梦旅程-Windows游戏编程之从零开始》 勘误
    杭电ACM 1003 ( 动态规划法 水题)
    《编程之美》
    [蓝桥杯][2014年第五届真题]地宫取宝
    [蓝桥杯][2013年第四届真题]危险系数
    2142: 逛超市(zznuoj)
    2141:2333(zznuoj)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2988736.html
Copyright © 2011-2022 走看看