電話薄在實際的開發中還是很常見的,在論壇中經常有人問,回答的也是事實而非,今天有空做點記錄吧。
電話薄的開發無非就是對連絡方式的增、刪、改、查四種操作,這裡可要注意了,在Android裡面給使用者的許可權更大,可以修改和刪除已有的連絡人的資訊,與J2me PIM不一樣哦。在Android系統裡面正對連絡人的操作是被劃分在Content Providers裡面,用做好類似的開發,需要瞭解的知識:Uri(不是Url)、Android的許可權控制、Android的聯絡方是表的欄位等等。
有了上面的知識其實就可以開發增刪改查的功能了,在網路上面看的基本只有增和查,在這裡重點也在更新和刪除,注意在做涉及到網系統讀寫的操作的時候,要在你的AndroidMainfest.xml裡面把許可權開啟:
這裡讀和寫的許可權都要開啟,與我們一般的思路有點不一樣,這裡讀寫權限是分開的,要是還想打電話就要也要把其對應的許可權開啟
這些都是一些很細節性的基礎東西,對於初學者很有必要注意哦,有的時候這些簡單的基礎東西沒有注意可能會然他你死活找不到bug所在。
廢話少說,下面貼點代碼:
<1>添加:
public boolean insert(String name, String phoneNum, String email, String qq) {
if (name == null) {
Log.e(TAG, "The Name is not allow null!!");
return false;
}
try {
ContentResolver contentResolver = mContext.getContentResolver();
ContentValues values = new ContentValues();
Uri phoneUri = null;
// 添加姓名
values.put(Contacts.People.NAME, name);
// 映射關係:1 = 新的連絡方式加入 favorites,0 = 新的連絡方式不是加入 favorites
values.put(Contacts.People.STARRED, 1);
Uri uri = Contacts.People.createPersonInMyContactsGroup(contentResolver, values);
// 添加電話號碼
// 最好的辦法是先得到People表的Uri,然後使用Uri的靜態方法withAppendedPath來擷取一個新的Uri作為我們新要插入資料的Uri
if (phoneNum != null && !phoneNum.trim().equals("")) {
phoneUri = Uri.withAppendedPath(uri, Contacts.People.Phones.CONTENT_DIRECTORY);
values.clear();
values.put(Contacts.Phones.TYPE, Contacts.Phones.NUMBER);
values.put(Contacts.Phones.NUMBER, phoneNum);
contentResolver.insert(phoneUri, values);
}
if (email != null && !email.trim().equals("")) {
// 添加Email
Uri emailUri = Uri.withAppendedPath(uri, Contacts.People.ContactMethods.CONTENT_DIRECTORY);
values.clear();
// ContactMethods.KIND 是用來區分像email,im等等不同連絡方式
values.put(Contacts.ContactMethods.KIND, Contacts.KIND_EMAIL);
values.put(Contacts.ContactMethods.DATA, email);
values.put(Contacts.ContactMethods.TYPE, Contacts.ContactMethods.TYPE_HOME);
contentResolver.insert(emailUri, values);
}
if (qq != null && !qq.trim().equals("")) {
// 添加QQ號碼
values.clear();
Uri qqUri = Uri.withAppendedPath(uri, Contacts.People.ContactMethods.CONTENT_DIRECTORY);
values.put(Contacts.ContactMethods.KIND, Contacts.KIND_IM);
values.put(Contacts.ContactMethods.DATA, qq);
values.put(Contacts.ContactMethods.TYPE, Contacts.ContactMethods.TYPE_HOME);
contentResolver.insert(qqUri, values);
}
} catch (Exception e) {
Log.e(TAG, "InsertContact Error !!!!");
return false;
}
return true;
}
<2>刪除:
public boolean delete(String name) {
ContentResolver contentResolver = mContext.getContentResolver();
if (name != null)
contentResolver.delete(Contacts.People.CONTENT_URI, Contacts.People.NAME + "=?", new String[] { name });
else
contentResolver.delete(Contacts.People.CONTENT_URI, null, null);
return true;
}
<3>更新:
更新麻煩一點,需要先按更新條件找到記錄所帶的id,之後再做相應的操作。
ContentResolver contentResolver = mContext.getContentResolver(); Cursor cusor = null; String[] projection = new String[] { Contacts.People._ID, Contacts.People.NAME, Contacts.People.NUMBER }; cusor= contentResolver.query(Contacts.People.CONTENT_URI, projection,Contacts.People.NAME + "=?", new String[] { oldName },Contacts.People.NAME + " ASC"); cusor.moveToFirst(); ContentValues values = new ContentValues(); Uri uri = Uri.withAppendedPath(Contacts.People.CONTENT_URI, cusor.getString(cusor.getColumnIndex(Contacts.People._ID))); values.put(Contacts.People.NAME, newName); values.put(Contacts.People.STARRED, 0); values.put(Contacts.Phones.NUMBER, newPhoneNum); contentResolver.update(uri, values, null, null);