導航:首頁 > 源碼編譯 > 安卓在線通訊錄源碼

安卓在線通訊錄源碼

發布時間:2023-01-24 15:36:11

android快速獲取聯系人

獲取聯系人在Android開發中經常會遇到,最近項目需要用到獲取手機聯系人的功能,於是寫了一個先查詢聯系人id然後再根據id查詢手機號demo,結果慢到懷疑人生(親測聯系人數據1500+)。最後經過優化查詢方式後,查詢時間在200ms左右(親測聯系人數據1500+)在這里分享給大家,以方便自己好直接拿來用。國際慣例,註:以下測試只查詢名字和手機號碼

1、查詢所有聯系人

2、通過姓名獲取聯系人

3、通過手機號碼查詢聯系人

最後附上源碼

㈡ 跪求大神給份用Android做的手機通訊錄的完整源碼,能夠打電話,發簡訊,創建等等,謝謝了。

Android通訊錄管理(獲取聯系人、通話記錄、簡訊消息)
http://blog.csdn.net/wwj_748/article/details/19965913
用這個地址

㈢ android 通訊錄 怎麼改聯系人

通過getContentResolver()得到ContentResolver
後,我們就可以通過該對象的delete,insert,updata,query等方法間接操作聯系人資料庫,那麼,如果我們刪除某些聯系人,以ContactsContract.RawContacts.CONTENT_URI為例,怎麼做,先來看下源碼:

首先,ContentResolver調用delete();刪除操作從紅色部分開始
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
waitForAccess();
return super.delete(uri, selection, selectionArgs);
}
上面的super.delete(uri, selection, selectionArgs)調用父親方法
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int count = 0;
boolean applyingBatch = applyingBatch();
if (!applyingBatch) {
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
try {
count = deleteInTransaction(uri, selection, selectionArgs);
if (count > 0) {
mNotifyChange = true;
}
mDb.setTransactionSuccessful();
} finally {
mDb.endTransaction();
}
onEndTransaction();
} else {
count = deleteInTransaction(uri, selection, selectionArgs);
if (count > 0) {
mNotifyChange = true;
}
}
return count;
}
父類回調deleteInTransaction(uri, selection, selectionArgs);刪除聯系人操作在這里進行。
//該方法對uri進行匹配來執行相應的刪除操作,並且是在事務中完成的,,比如
//content://com.android.contacts/contacts
//content://com.android.contacts/contacts/#
// .......................................................省略
@Override
protected int deleteInTransaction(Uri uri, String selection, String[] selectionArgs) {
.......................................................
.......................................................
//我們可以在uri中的authority部分可帶可選的參數ContactsContract.CALLER_IS_SYNCADAPTER
//比如uri字元串可以寫成content://com.android.contacts?ContactsContract.CALLER_IS_SYNCADAPTER=true
// ContactsContract.CALLER_IS_SYNCADAPTER默認是false的,他告訴同步適配器如何執行刪除操作。
//如果設置為true,則delete的時候直接刪除聯系人,否則,默認delete時是不會立即刪除RawContacts中的數據的,
//只是把RawContacts.DELETED標志位設置為1,從它的aggregate contact中移除該raw contact,即顯示聯系人時不顯示它的內容
//同步聯系人時,刪除伺服器上的raw contact,最終刪除手機上已
//標記為DELETED為1的raw contacts

final boolean callerIsSyncAdapter = readBooleanQueryParameter(uri, ContactsContract.CALLER_IS_SYNCADAPTER, false);
final int match = sUriMatcher.match(uri);
switch (match) {
.......................................................
.......................................................
.......................................................
case CONTACTS: {//uri為content://com.android.contacts/contacts,目錄(dir)類型
// TODO
return 0;
}
case CONTACTS_ID: {//刪除某一個聯系人,uri指定了ContactsContract.Contacts中的欄位contact_id,Item類型
long contactId = ContentUris.parseId(uri);//得到該給定聯系人數據集的id
return deleteContact(contactId);
}
.......................................................
.......................................................
.......................................................
case RAW_CONTACTS: {
int numDeletes = 0;
Cursor c = mDb.query(Tables.RAW_CONTACTS, new String[]{RawContacts._ID},
appendAccountToSelection(uri, selection), selectionArgs, null, null, null);
try {
while (c.moveToNext()) {
final long rawContactId = c.getLong(0);
numDeletes += deleteRawContact(rawContactId, callerIsSyncAdapter);
}
} finally {
c.close();
}
return numDeletes;
}
case RAW_CONTACTS_ID: {
final long rawContactId = ContentUris.parseId(uri);
return deleteRawContact(rawContactId, callerIsSyncAdapter);
}
case DATA: {
mSyncToNetwork |= !callerIsSyncAdapter;
return deleteData(appendAccountToSelection(uri, selection), selectionArgs,
callerIsSyncAdapter);
}
case DATA_ID:
case PHONES_ID:
case EMAILS_ID:
case POSTALS_ID: {
long dataId = ContentUris.parseId(uri);
mSyncToNetwork |= !callerIsSyncAdapter;
return deleteData(Data._ID + "=" + dataId, null, callerIsSyncAdapter);
}
.......................................................
.......................................................
.......................................................
}
}

public int deleteRawContact(long rawContactId, boolean callerIsSyncAdapter) {
if (callerIsSyncAdapter) {
mDb.delete(Tables.PRESENCE, PresenceColumns.RAW_CONTACT_ID + "=" + rawContactId, null);
//直接刪除數據
return mDb.delete(Tables.RAW_CONTACTS, RawContacts._ID + "=" + rawContactId, null);
} else {
//從他關聯的aggregate contact移除該數據
mDbHelper.removeContactIfSingleton(rawContactId);
//標記為已刪除,但不是立即刪除數據
return markRawContactAsDeleted(rawContactId);
}
}

綜上,我們要刪除聯系人可以這樣做:
1)刪除單個聯系人:
CR.delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.RawContacts_id + "=" + delRawId);
2)刪除全部聯系人:
getContentResolver().delete(Uri.parse(ContactsContract.RawContacts.CONTENT_URI.toString() +"?" + ContactsContract.CALLER_IS_SYNCADAPTER+"=true"), ContactsContract.RawContacts._ID + ">0", null));
數據索引從1開始,所以只要id>0就可以全部刪除raw contact記錄,上面的刪除操作是立即進行的,因為我們設置了true.

㈣ 通訊錄源代碼下載

中國站長戰

㈤ 為什麼我在eclipse導入Android自帶通訊錄源碼有那麼多錯誤,好像是缺少幾個包,求解

沒裝ANDROID SDK吧。。。
http://apps.hi..com/share/detail/34638353下面有完整教材和下載,希望採納

㈥ 關於ANDROID自帶的聯系人CONTACTS源碼的分析,求助

The Structure of the Contacts Mole

|——/packages/apps/Contacts/src/com/android/contacts
| |——ContactsListActivity.java
| |——ContactsManagementActivity.java
| |——DialtactsActivity.java
| |——ExportVCardActivity.java
| |——GroupsManagementActivity.java
| |——ImportVCardActivity.java
| |——ViewContactActivity.java
| |
| |——model
| | |——ContactsSource.java
| | |——EntityDelta.java
| | |——FallbackSource.java
| | |——Sources.java
| |
| |——ui
| | |——EditContactActiviry.java
| |
| |——widget
| | |——BaseContactEditorView.java
| | |——ContactEditorView.java
| | |——GenericEditorView.java
| | |——KindSectionView.java
| | |——PhotoEditorView.java
| | |——ReadOnlyContactEditorView.java
| |
| |——util
| |——Constants.java
| |——EmptyService.java
|
|——/packages/apps/Contacts/res
| |——drawable
| |——drawable-finger
| |——drawable-hdpi
| |——drawable-hdpi-finger
| |——drawable-mdpi
| |——drawable-mdpi-finger
| |——layout
| |——menu
| |——values
| |——values-zh-rCN
| |——AndroidManifest.xml
|
|——/packages/providers/ContactsProviders/src/com/android/providers/contacts
| |——ContactsDatabaseHelper.java
| |——ContactsProvider.java
| |——ContactsProvider2.java
| |——SQLiteContentProvider.java
|
|——The database address and name
|——data/data/com.android.providers.contacts/databases/contacts2.db

閱讀全文

與安卓在線通訊錄源碼相關的資料

熱點內容
如何發展mc伺服器 瀏覽:160
安卓手機拍照是反的如何正過來 瀏覽:619
伺服器怎麼外接機械硬碟 瀏覽:84
如何輸入代理伺服器和埠 瀏覽:674
排序演算法的實現的總結 瀏覽:16
重慶活塞並聯壓縮機哪裡買 瀏覽:516
中信銀行信用卡app叫什麼名字圖片 瀏覽:15
php指定ip訪問 瀏覽:45
n1盒子編譯openwrt 瀏覽:957
android不混淆庫 瀏覽:622
酷程序員頭像 瀏覽:808
短視頻平台伺服器怎麼選 瀏覽:74
怎麼分辨瑞年和平年的C語言編譯 瀏覽:217
黑馬程序員vue教程第32講 瀏覽:761
為什麼伺服器拷貝速度百兆 瀏覽:651
月薪過萬的程序員多久能在北上廣 瀏覽:982
媽媽看中程序員相親 瀏覽:381
伺服器配置不了ip地址怎麼辦 瀏覽:878
小米商城app有什麼 瀏覽:303
鋼筋加密區根數調整 瀏覽:385