天天襙-天天草天天草-天天草天天操-天天艹天天艹-天天艹日日干-天天艹逼

學會這招,讓你輕松搞定 Android 開發(fā)通訊錄更新

在Android開發(fā)中,通訊錄更新是一個常見的需求,但很多新手開發(fā)者可能會覺得這個任務有點棘手。別擔心,本文將帶你一步步完成這個任務,從獲取權限到查詢數(shù)據(jù),再到更新和保存,每個步驟都會有詳細的代碼實現(xiàn)和講解。準備好了嗎?讓我們一起開始這段有趣的編程之旅吧!

獲取通訊錄讀寫權限

我們要確保應用有權限對通訊錄進行操作。在AndroidManifest.xml文件中添加以下權限:

xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>

這段代碼會向系統(tǒng)請求讀取和寫入通訊錄的權限,確保應用能夠?qū)νㄓ嶄涍M行操作。別忘了,權限是基礎,沒有它,后面的操作都是白搭!

我們還需要在運行時動態(tài)請求權限。在Activity或Fragment中添加以下代碼:

java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_CODE);
}

這段代碼會檢查應用是否已經(jīng)擁有讀取通訊錄的權限,如果沒有,就會彈出請求權限的對話框。用戶同意后,我們才能繼續(xù)下一步操作。

查詢現(xiàn)有通訊錄數(shù)據(jù)

獲取權限后,我們就可以開始查詢通訊錄數(shù)據(jù)了。首先,在Activity或Fragment中定義一個方法來查詢通訊錄數(shù)據(jù):

java
private void queryContacts() {
    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        do {
            String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            Log.d("Contact", "ID: " + id + ", Name: " + name);
        } while (cursor.moveToNext());
        cursor.close();
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
  • 1.
  • 2.

}
}

這段代碼使用ContentResolver通過查詢ContactsContract.Contacts.CONTENT_URI來獲取通訊錄數(shù)據(jù)。然后,通過Cursor遍歷查詢結果,獲取聯(lián)系人的ID、姓名等信息。每個聯(lián)系人的信息都會被打印出來,方便我們查看。

查詢通訊錄數(shù)據(jù)是更新操作的基礎,只有了解了現(xiàn)有的數(shù)據(jù),我們才能進行后續(xù)的更新操作。所以,這一步非常關鍵,一定要仔細檢查每個聯(lián)系人的信息是否正確。

更新通訊錄數(shù)據(jù)

更新通訊錄數(shù)據(jù)包括新增、修改和刪除操作。以下是具體實現(xiàn)代碼:

新增聯(lián)系人:

java
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
private void queryContacts() {
    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);
    if (cursor != null && cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            // 獲取聯(lián)系人的ID
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            // 獲取聯(lián)系人的名字
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            // 其他信息的獲取和處理...
        }
        cursor.close();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.build());
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "New Contact")
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "1234567890")
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

這段代碼使用ContentProviderOperation構建一個操作列表,通過插入ContactsContract.RawContacts.CONTENT_URI和ContactsContract.Data.CONTENT_URI來新增聯(lián)系人信息。其中,withValue方法用于設置聯(lián)系人的名稱、電話號碼等信息。新增聯(lián)系人后,通訊錄中就會多出一個新的聯(lián)系人。

修改聯(lián)系人:

java
Uri updateUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, "Updated Name");
getContentResolver().update(updateUri, values, null, null);
private void addContact(String name, String phoneNumber) {
    ArrayList<ContentProviderOperation> operationList = new ArrayList<>();
    operationList.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
            .build());
    operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
            .build());
    operationList.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber)
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
            .build());
    try {
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

這段代碼通過ContentUris.withAppendedId方法獲取要修改的聯(lián)系人的URI,然后使用ContentValues設置新的聯(lián)系人名稱,最后調(diào)用getContentResolver().update方法進行更新。修改聯(lián)系人后,通訊錄中的聯(lián)系人名稱就會更新為新的名稱。

刪除聯(lián)系人:

java
Uri deleteUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
這段代碼通過ContentUris.withAppendedId方法獲取要刪除的聯(lián)系人的URI,然后調(diào)用getContentResolver().delete方法進行刪除。刪除聯(lián)系人后,通訊錄中就不會再有這個聯(lián)系人了。
保存通訊錄更新結果
更新通訊錄數(shù)據(jù)后,我們需要保存更新結果。通常情況下,Android系統(tǒng)會自動保存更新結果,但我們也可以手動保存,以確保數(shù)據(jù)的一致性。

java

getContentResolver().notifyChange(ContactsContract.Contacts.CONTENT_URI, null);

這段代碼會通知系統(tǒng)通訊錄數(shù)據(jù)已經(jīng)發(fā)生了變化,系統(tǒng)會自動更新通訊錄的顯示。這樣,用戶就能看到最新的通訊錄數(shù)據(jù)了。

總結與思考

通過本文的介紹,你應該已經(jīng)掌握了如何在Android開發(fā)中實現(xiàn)通訊錄的更新操作。從獲取權限到查詢數(shù)據(jù),再到更新和保存,每個步驟都有詳細的代碼實現(xiàn)和講解。希望這篇文章能幫助你更好地理解和掌握Android開發(fā)中的通訊錄更新操作。

private void updateContact(long contactId, String name, String phoneNumber) {
    ArrayList<ContentProviderOperation> operationList = new ArrayList<>();
    operationList.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(ContactsContract.Contacts._ID + "=?", new String[]{String.valueOf(contactId)})
            .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
            .build());
    operationList.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(ContactsContract.Contacts._ID + "=?", new String[]{String.valueOf(contactId)})
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber)
            .build());
    try {
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
    } catch (Exception
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

現(xiàn)在,我想問你一個問題:在實際開發(fā)中,你遇到過哪些與通訊錄更新相關的挑戰(zhàn)?你是如何解決這些挑戰(zhàn)的?歡迎在評論區(qū)分享你的經(jīng)驗和想法,讓我們一起學習和進步!

THE END
主站蜘蛛池模板: 精品无码一区二区三区中文字幕 | 国产123区 | 校园全肉高h湿一女多男 | 国产视频一区在线观看 | 亚洲春色综合另类网蜜桃 | 日本人啪啪 | 成年人黄视频在线观看 | 欧美性xxxxx 欧美性bbbbbxxxxxddd | 欧美国产日本高清不卡 | 美女的隐私无遮挡的网页 | 爱情岛论坛自拍永久入口 | 爸爸的宝贝小说全文在线阅读 | 男女视频在线观看 | 成人永久免费 | 91精品国产高清久久久久久io | 精品一区二区三区波多野结衣 | 男人女人日皮视频 | 国产一级特黄aa大片免费 | 日本人和黑人一级纶理片 | 性妲己 | 欧洲喷浆乌克兰 | 亚洲激情综合 | 久久久精品3d动漫一区二区三区 | 成年人在线免费观看视频网站 | 国产欧美又粗又猛又爽老 | 久久精品成人免费看 | 完整秽淫刺激长篇小说 | 国产精品午夜性视频网站 | 亚洲h片 | 成人在线日韩 | 欧美亚洲国产综合在线 | 贰佰麻豆剧果冻传媒一二三区 | julianann在厨房 | 五月天婷婷精品免费视频 | 好男人免费高清在线观看2019 | 日韩成人av在线 | 日韩一区二三区无 | 91理论片午午伦夜理片久久 | 好涨好大我快受不了了视频网 | 亚洲成人三级 | 国产美女久久久久 |