Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android:利用內容提供者操作聯系人

android:利用內容提供者操作聯系人

編輯:關於Android編程

路徑:data/data/com.android.providers.contacts/databases/contact2.db
raw_contacts表 存放聯系人的id,一個聯系人對應一個id data表 raw_contact_id外鍵 mimetype_id是類型 外鍵,郵箱,地址,電話 存放聯系人的數據,
數據存放data1列, 數據類型 mimetype_id 數據屬於哪個聯系人 raw_contact_id
mimetypes表 定義的數據的類型 5電話 7姓名 1郵箱
如何查詢聯系人?
1.查詢raw_contacts表 獲取所有的聯系人的id
2.根據聯系人的id查詢data表 裡面data1的數據
查詢 數據類型 電話 郵箱 姓名
3.根據mimetype獲取數據的類型。
內容提供者 系統聯系人的源代碼 JB\packages\providers\ContactsProvider 清單文件 主機名 android:authorities="contacts;com.android.contacts",分號隔開,意思是2個都可以,2.1之前是前一個,後來覺著名稱可能重復,2.1之後就改成後面的了 如果想兼容的版本比較好一些,用前面的 ContactsProvider2.java裡面 找UriMatcher uri的匹配路徑 查詢的是 視圖 view_raw_contacts view_data 如果想看是查詢的哪個表,可以把 getContentResolver().query(dataUri, new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{id}, "id");最後一個參數故意寫錯會在日志中顯示sql語句 java代碼?
public void readContact(View view){
		//利用內容提供者獲取聯系人的數據庫
		Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri=Uri.parse("content://com.android.contacts/data");
		//1.查詢row_content表裡面所有聯系人的id
		Cursor cursor = getContentResolver().query(uri, new String[]{"contact_id"}, null, null, "_id desc");
		StringBuilder sb=new StringBuilder();
		while (cursor.moveToNext()) {
			String id = cursor.getString(0);
			//判斷這個聯系人是否被刪除
			if(TextUtils.isEmpty(id))continue;
			System.out.println(id);
			//2.根據聯系人查詢data表裡面的數據
			Cursor datacursor = getContentResolver().query(dataUri, /*new String[]{"data1","mimetype"}*/null, "contact_id=?", new String[]{id}, null);
			while (datacursor.moveToNext()) {
				String data1 = datacursor.getString(datacursor.getColumnIndex("data1"));
				String mimetype = datacursor.getString(datacursor.getColumnIndex("mimetype"));
				if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
					sb.append("電話:"+data1);
				}else if("vnd.android.cursor.item/email_v2".equals(mimetype)){
					sb.append("郵箱:"+data1);
				}else if("vnd.android.cursor.item/name".equals(mimetype)){
					sb.append("姓名:"+data1);
				}
			}
			sb.append("---------------------------\n");
			datacursor.close();
		}
		cursor.close();
		tv_show.setText(sb.toString());
	}


如何添加一個聯系人? 1.向raw_contact表添加一個聯系人的id 2.分別向data表裡面 添加聯系人的電話 郵箱 姓名

java代碼

	public void addContact(View view){
		//添加聯系人信息
		EditText et_name = (EditText) findViewById(R.id.et_name);
		EditText et_phone = (EditText) findViewById(R.id.et_phone);
		EditText et_email = (EditText) findViewById(R.id.et_email);
		//利用內容提供者獲取聯系人的數據庫
		Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri=Uri.parse("content://com.android.contacts/data");
		//1.添加raw_contact表一個聯系人的id 
		//新的聯系人的id=查詢最後一個聯系人的id+1;
		Cursor cursor = getContentResolver().query(uri, new String[]{"_id"}, null, null, null);
		cursor.moveToLast();
		int lastid=cursor.getInt(0);
		int id=lastid+1;
		ContentValues values=new ContentValues();
		values.put("contact_id", id);
		getContentResolver().insert(uri, values);
		//2.向data表添加數據 姓名
		ContentValues datavalues=new ContentValues();
		datavalues.put("raw_contact_id", id);
		datavalues.put("mimetype", "vnd.android.cursor.item/name");
		datavalues.put("data1", et_name.getText().toString());
		getContentResolver().insert(dataUri, datavalues);
		
		// 郵箱
		ContentValues emailalues=new ContentValues();
		emailalues.put("raw_contact_id", id);
		emailalues.put("mimetype", "vnd.android.cursor.item/email_v2");
		emailalues.put("data1", et_email.getText().toString());
		getContentResolver().insert(dataUri, emailalues);
		
	}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved