Android 聯絡人資料庫介紹以及對聯絡人的基本操作
一、 聯絡人資料庫
聯絡人的資料庫檔案的位置
/data/data/com.Android.providers.contacts/databases.contacts2.db
資料庫中重要的幾張表
1、contacts表
該表儲存了所有的手機測聯絡人,每個聯絡人佔一行,該表儲存了聯絡人的
ContactID、聯絡次數、最後一次聯絡的時間、是否含有號碼、是否被新增
到收藏夾等資訊。
2、raw_contacts表
該表儲存了所有建立過的手機測聯絡人,每個聯絡人佔一行,表裡有一列標
識該聯絡人是否被刪除,該表儲存了兩個ID:RawContactID和ContactID,
從而將contacts表和raw_contacts表聯絡起來。該表儲存了聯絡人的
RawContactID、ContactID、聯絡次數、最後一次聯絡的時間、是否被添
加到收藏夾、顯示的名字、用於排序的漢語拼音等資訊。
3、 mimetypes
該表定義了所有的MimeTypeID,即聯絡人的各個欄位的唯一標誌。
4、data表
該表儲存了所有建立過的手機測聯絡人的所有資訊,每個欄位佔一行 ,該表
儲存了兩個ID:MimeTypeID和RawContactID,從而將data表和
raw_contacts表聯絡起來。
聯絡人的所有資訊儲存在列data1至data15中,各列中儲存的內容根據
MimeTypeID的不同而不同。如儲存號碼(MimeTypeID=5)的那行資料中,
data1列儲存號碼,data2列儲存號碼型別(手機號碼/家庭號碼/工作號碼等)。
一:聯絡人資料庫查詢
public class MainActivity extends Activity {
private ListView listView;
private TextView empty;
private ContentResolver resolver;
// 聯絡人表的uri
private Uri contactsUri = Contacts.CONTENT_URI;
private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
private Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("flag","------------->NUMBER: "+ContactsContract.CommonDataKinds.Phone.NUMBER);
initView();
resolver = getContentResolver();
Cursor contactsCursor = resolver.query(contactsUri, null, null, null, null);
List<Map<String,Object>> data = parseCursor(contactsCursor);
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
new String[]{"display_name","phone","email"}, new int[]{R.id.displayName,R.id.phone,R.id.email});
listView.setAdapter(adapter);
listView.setEmptyView(empty);
}
private List<Map<String, Object>> parseCursor(Cursor contactsCursor) {
List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
while(contactsCursor.moveToNext()){
Map<String,Object> map = new HashMap<String, Object>();
// 獲取聯絡人的id
int _id = contactsCursor.getInt(contactsCursor.getColumnIndex(Contacts._ID));
String name = contactsCursor.getString(contactsCursor.getColumnIndex(Contacts.DISPLAY_NAME));
map.put("display_name", name);
// 根據聯絡人的_id(此處獲取的_id和raw_contact_id相同,因為contacts表就是通過這兩個欄位和raw_contacts表取得聯絡)查詢電話和email
// 查詢電話
Cursor phoneCursor = resolver.query(phoneUri, new String[]{ContactsContract.CommonDataKinds.Phone.DATA1}, "raw_contact_id = ?", new String[]{_id+""}, null);
String phone = "";
while(phoneCursor.moveToNext()){
phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
map.put("phone", phone);
phoneCursor.close();
phoneCursor = null;
// 查詢郵箱
Cursor emailCursor = resolver.query(emailUri, new String[]{ContactsContract.CommonDataKinds.Email.ADDRESS}, "raw_contact_id = ?", new String[]{_id+""}, null);
String email = null;
while(emailCursor.moveToNext()){
email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
}
map.put("email", email);
data.add(map);
}
return data;
}
private void initView() {
// TODO Auto-generated method stub
listView = (ListView) findViewById(R.id.listView);
empty = (TextView) findViewById(R.id.empty);
}
}
二:聯絡人資料庫新增
// 插入資料
public void btnInsert(View view){
// 1、向rawUri中插入一條空的資料
ContentValues values = new ContentValues();
Uri insert = resolver.insert(RawContacts.CONTENT_URI, values);
// 2、獲取raw_id
long _id= ContentUris.parseId(insert);
// 3、向data表中新增資料,向data表中插入資料是分條新增,因為呼叫一次insert只能向資料庫中新增一個欄位的資料
ContentValues valuesName = new ContentValues();
// 3.1、向哪一條聯絡人中新增資料
valuesName.put(ContactsContract.Data.RAW_CONTACT_ID, _id);
// 3.2、新增名字
// data1
valuesName.put(ContactsContract.CommonDataKinds.StructuredName.DATA1, "huanhuanlele");
// 3.3、指定型別
valuesName.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
resolver.insert(ContactsContract.Data.CONTENT_URI, valuesName);
// 新增電話
ContentValues valuesNumber = new ContentValues();
// 1、指定_id
valuesNumber.put(ContactsContract.Data.RAW_CONTACT_ID, _id);
// 2、新增電話號碼
valuesNumber.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "1234567890");
// 3、指定資料型別
valuesNumber.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
resolver.insert(ContactsContract.Data.CONTENT_URI, valuesNumber);
// 新增Email
ContentValues valuesEmail = new ContentValues();
// 1、指定_id
valuesEmail.put(ContactsContract.Data.RAW_CONTACT_ID, _id);
// 2、新增資料
// data1
valuesEmail.put(ContactsContract.CommonDataKinds.Email.DATA1, "[email protected]");
// 3、指定資料型別
valuesEmail.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
resolver.insert(ContactsContract.Data.CONTENT_URI, valuesEmail);
}
三:聯絡人資料庫刪除
// 刪除聯絡人
public void btnDelete(View view){
int delete = resolver.delete(ContactsContract.Data.CONTENT_URI,
ContactsContract.Data.RAW_CONTACT_ID+" = ?", new String[]{5+""});
if(delete>=0){
Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(MainActivity.this, "刪除失敗", Toast.LENGTH_LONG).show();
}
}
四:聯絡人資料庫更新
// 更新聯絡人
public void btnUpdate(View view){
ContentValues valuesUpdate = new ContentValues();
valuesUpdate.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "4444444445678");
int update = resolver.update(ContactsContract.Data.CONTENT_URI, valuesUpdate,
ContactsContract.Data.RAW_CONTACT_ID+" = ? and "+
ContactsContract.Data.MIMETYPE+" = ?",
new String[]{6+"",5+""});
if(update>=0){//更新成功
Toast.makeText(MainActivity.this, "更新資料成功", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(MainActivity.this, "更新資料失敗", Toast.LENGTH_LONG).show();
}
}
相關推薦
Android 聯絡人資料庫介紹以及對聯絡人的基本操作
一、 聯絡人資料庫 聯絡人的資料庫檔案的位置 /data/data/com.Android.providers.contacts/databases.contacts2.db 資料庫中重要的幾張表 1、contacts表 該表儲存了所有的手
一種Android上基於畫素對比做基本圖案識別的簡單粗暴辦法
使用者希望通過書寫不規則的圖形之後,能夠識別出這個圖案是什麼,並輸出同等大小的規則圖形。第一步當然就是識別圖案了,我用的方法原理大致分如下幾步: 1、將使用者輸入的圖片長寬壓縮為目標大小,如100*100畫素 2、和圖案庫中預留的幾張預定大小(例如100*100畫素)的基礎圖案的畫素都進行一
C++的iostream標準庫介紹以及對左移與右移運算子的過載
我們從一開始就一直在利用C++的輸入輸出在做著各種練習,輸入輸出是由iostream庫提供的,所以討論此標準庫是有必要的,它與C語言的 stdio庫不同,它從一開始就是用多重繼承與虛擬繼承實現的面向物件的層次結構,作為一個c++的標準庫元件提供給程式設計師使用。 iostr
2-activiti資料庫介紹以及配置檔案
activiti與spring整合需要的jar包 <!-- activiti jar --> <dependency> <groupI
Android Paint類介紹以及浮雕和陰影效果的設定
Paint類介紹 Paint即畫筆,在繪製文字和圖形用它來設定圖形顏色, 樣式等繪製資訊。 1.圖形繪製 setARGB(int a,int r,int g,int b); 設定繪製的顏色,a代表透明度,r,g,b代表顏色值。 setAl
Python-借助xlsxwriter對Excel基本操作
ring log tle src ima 文件 條形圖 def title 1導入第三方包,需單獨下載,安裝pip工具的情況下,可使用CMD下命令:pip install xlsxwriter 1 import xlsxwriter 2創建excel文件,新增一個工作簿
MySQL資料庫與資料表的基本操作
初學小建議 MySQL是不區分大小寫的,大家在初學的時候希望能養成習慣,把保留詞,關鍵字統一採用大寫的形式書寫,其他的使用小寫字母,方便區分。 初期這個習慣可能不太容易養成,但是一旦習慣,對工作的規範性會好很多,統一的規範方便大家一起工作! 選單
資料庫和資料表的基本操作
一、資料庫的操作 // 登陸mysql資料庫 mysql -u root -p; // 建立資料庫 CREATE DATABASE db_book; // 檢視所有資料庫 SHOW DATABASE; // 選擇資料庫 USE db_book; // 檢視所有資料表 SHOW TAB
mysql 資料庫的概念和的基本操作:
SQL: Struct Query Language(結構化查詢語言) ,其實是一個“國際化”標準。各種關係資料庫,其實都是實現(並擴充)該標準的一種產品。 資料庫的本質就是將大量的“資料值”通過資料庫管理系統進行某種複雜但是邏輯結構上清晰有序的儲存。資料庫的結構:資料:data資料庫:datebase 指
mysql資料庫中表和資料的基本操作
資料庫的結構為:資料庫→表→資料資料庫建立完成後不能直接新增資料,需先建表,在表裡寫資料表的建立:create table [if not exists] 表名(欄位列表, [約束或索引列表],欄位列表, [約束或索引列表],索引約束) [表選項列表];刪除:drop&nb
微信小程式setData()方法的詳解以及對陣列/json操作
一、setData()方法: 1、引數接受一個物件,以key,value的形式表示; 2、引數和變數名稱一致,可用一個值代替(es6新語法特性) 如上圖所示,在this.data中設定ceshi這條資料,在方法中,我們定義ceshi變數讓其等於that.data.ce
android native開發-native實現對camera的操作
通過native實現camera的操作 原始碼路徑:frameworks/av/camera/ndk/ 參考的test原始碼路徑:cts/tests/tests/graphics/jni/CameraTestHelpers.cpp 1/* 2 * Copyrig
docker 基礎命令操作 映象以及容器的基本操作演示
tomcat啟動後’,可以通過頁面訪問到預設頁面,可以更加直觀的顯示出來;我們就以tomcat為例,對映象,容易的基礎操作進行演示; 1.查詢映象命令 docker search tomcat , 執行後,出現一個列表,表頭的相關資訊,看名字,可以很容易的理解,分別是
【Unity3D入門教程】Unity3D介面介紹及遊戲物件基本操作
1 介面介紹 在Windows等圖形化作業系統上,熟練地使用選單、圖示、快捷鍵等,將會極大提升工作效率。因此,要認識一個軟體,學會熟練使用他們,就必須先認識軟體的介面。 先點選選單欄的Window——
MySQL資料庫 || 資料庫和資料表的基本操作
第一篇博文,一個小小的紀念儀式^-^ 以下正文 一:資料庫的基本操作 --資料庫的操作 --連線資料庫 mysql -uroot -p密碼 mysql -uroot -pmysql --退出資料庫 exit quit ctrl + d --檢視所有資料庫
什麼是影象以及opencv的基本操作
影象就是由一系列畫素點構成的影象 拿灰度圖(二通道影象)來說,它在計算機中的儲存形式就是一個二維矩陣,構成影象上所有畫素點的資訊,它其實就是一系列亮度不同的點構成,每個畫素點的亮度由該畫素所儲存的值決定(0-255); 多通道影象(俗稱彩色影象)的
Nodejs對postgresql基本操作的封裝
基於nodejs平臺對postgresql的增刪改查基本操作進行了封裝,能滿足基本的實際應用,比較複雜的SQL需另外實現。 PG.js檔案如下: var pg = require('pg'); var conString = "postgres://username:[e
MYSQL(資料庫概念,表的基本操作)
一、資料庫概念 資料庫(Database:DB):資料庫是按照資料結構啦組織、儲存和管理資料的倉庫--->資料庫其實就是磁碟中的檔案+管理系統 資料庫管理系統(Database Management System:DBMS)是專門用於管理資料庫的計算機
JNI學習(四)、本地方法建立java物件,以及對字串的操作
一、本地方法建立Java物件 JNIEnv提供了下面的幾個方法來建立一個Java物件: jobject NewObject(jclass clazz, jmethodID methodID, ...) jobject NewObjectV(jclass clazz, j
Python 資料處理擴充套件包: pandas 模組的DataFrame介紹(建立和基本操作)
DataFrame是Pandas中的一個表結構的資料結構,包括三部分資訊,表頭(列的名稱),表的內容(二維矩陣),索引(每行一個唯一的標記)。 一、DataFrame的建立 有多種方式可以建立DataFrame,下面舉例介紹。 例1: 通過list建立 >