Android訪問通訊錄和新增聯絡人
package com.example.test; import java.util.ArrayList; import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.test.AndroidTestCase; import android.util.Log; public class ContactsTest extends AndroidTestCase { private static final String TAG = "ContactsTest"; /** * 獲取聯絡人 * */ public void testGetContacts(){ Uri uri = Uri.parse("content://com.android.contacts/contacts"); // 訪問所有聯絡人 ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null); while(cursor.moveToNext()){ int contactsId = cursor.getInt(0); StringBuilder sb = new StringBuilder("contactsId="); sb.append(contactsId); uri = Uri.parse("content://com.android.contacts/contacts/" + contactsId + "/data"); //某個聯絡人下面的所有資料 Cursor dataCursor = resolver.query(uri, new String[]{"mimetype", "data1", "data2"}, null, null, null); while(dataCursor.moveToNext()){ String data = dataCursor.getString(dataCursor.getColumnIndex("data1")); String type = dataCursor.getString(dataCursor.getColumnIndex("mimetype")); if("vnd.android.cursor.item/name".equals(type)){ // 如果他的mimetype型別是name sb.append(", name=" + data); } else if("vnd.android.cursor.item/email_v2".equals(type)){ // 如果他的mimetype型別是email sb.append(", email=" + data); } else if("vnd.android.cursor.item/phone_v2".equals(type)){ // 如果他的mimetype型別是phone sb.append(", phone=" + data); } } Log.i(TAG, sb.toString()); } } /** * 根據來電號碼獲取聯絡人名字 * */ public void testGetContactsByNumber(){ String number = "15292328801"; Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number); ContentResolver resolver = getContext().getContentResolver(); Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null); if(cursor.moveToFirst()){ String name = cursor.getString(0); Log.i(TAG, name); } } /** * 新增聯絡人 * 資料一個表一個表的新增,每次都呼叫insert方法 * */ public void testAddContacts(){ /* 往 raw_contacts 中新增資料,並獲取新增的id號*/ Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentResolver resolver = getContext().getContentResolver(); ContentValues values = new ContentValues(); long contactId = ContentUris.parseId(resolver.insert(uri, values)); /* 往 data 中新增資料(要根據前面獲取的id號) */ // 新增姓名 uri = Uri.parse("content://com.android.contacts/data"); values.put("raw_contact_id", contactId); values.put("mimetype", "vnd.android.cursor.item/name"); values.put("data2", "周國平"); resolver.insert(uri, values); // 新增電話 values.clear(); values.put("raw_contact_id", contactId); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); values.put("data2", "2"); values.put("data1", "15099144117"); resolver.insert(uri, values); // 新增Email values.clear(); values.put("raw_contact_id", contactId); values.put("mimetype", "vnd.android.cursor.item/email_v2"); values.put("data2", "2"); values.put("data1", "
[email protected]"); resolver.insert(uri, values); } /** * 新增聯絡人 * 在同一個事務中完成聯絡人各項資料的新增 * 使用ArrayList<ContentProviderOperation>,把每步操作放在它的物件中執行 * */ public void testAddContacts2(){ Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentResolver resolver = getContext().getContentResolver(); // 第一個引數:內容提供者的主機名 // 第二個引數:要執行的操作 ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); // 操作1.新增Google賬號,這裡值為null,表示不新增 ContentProviderOperation operation = ContentProviderOperation.newInsert(uri) .withValue("account_name", null)// account_name:Google賬號 .build(); // 操作2.新增data表中name欄位 uri = Uri.parse("content://com.android.contacts/data"); ContentProviderOperation operation2 = ContentProviderOperation.newInsert(uri) // 第二個引數int previousResult:表示上一個操作的位於operations的第0個索引, // 所以能夠將上一個操作返回的raw_contact_id作為該方法的引數 .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/name") .withValue("data2", "周國平") .build(); // 操作3.新增data表中phone欄位 uri = Uri.parse("content://com.android.contacts/data"); ContentProviderOperation operation3 = ContentProviderOperation.newInsert(uri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/phone_v2") .withValue("data2", "2") .withValue("data1", "15099144117") .build(); // 操作4.新增data表中的Email欄位 uri = Uri.parse("content://com.android.contacts/data"); ContentProviderOperation operation4 = ContentProviderOperation .newInsert(uri).withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/email_v2") .withValue("data2", "2") .withValue("data1", "[email protected]").build(); operations.add(operation); operations.add(operation2); operations.add(operation3); operations.add(operation4); try { resolver.applyBatch("com.android.contacts", operations); } catch (Exception e) { e.printStackTrace(); } } }
相關推薦
Android訪問通訊錄和新增聯絡人
package com.example.test; import java.util.ArrayList; import android.content.ContentProviderOperation;
如何向android手機通訊錄中新增聯絡人
直接在手機的通訊錄的資料庫中新增列表 相關程式碼如下 package com.example.test; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import
android 獲取通訊錄中同一聯絡人的多個號碼
public static void fetchContact(Context context) { List<ContactsBean> list = new ArrayList<>(); ContentResolver cr = context.getC
iTop4412 android系統去掉和新增apk
因為要裁剪系統,所以用了半天的時間研究刪除和新增apk進入android檔案系統。 環境: 系統:android4.03 開發板:4412 我這裡開發板使用的訊為的4412,android使用訊為提供的原始碼,但是原理是想通的。給的教程不算全面,有幾點沒有提到,有以下幾點
在通訊錄中新增聯絡人統計功能
packages/apps/Contacts/src/com/android/contacts/list/DefaultContactBrowseListFragment.java --- a/alps/packages/apps/Contacts/src/com/andr
android從通訊錄中選擇聯絡人並讀取號碼
1.Manifest檔案中新增許可權配置: <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name
下載Android手機通訊錄和Listview實現A-Z排序(附原始碼)
本章實現的功能:從Android手機中得到通訊錄聯絡人的資料,並且實現A-Z排序和搜尋過濾 以下是在本人手機中除錯的效果圖 要實現此功能 1,通過ContentProvider知識點讀取Android手機中聯絡人資料 記得要在AndroidManifest.xml宣告許
Android HTTPS驗證和新增http頭資訊token認證
SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("http", PlainSocketFactory .getSocketFact
用C語言模擬實現一個通訊錄,要求實現其新增 刪除 修改 查詢 模糊搜尋姓名和號碼 顯示和排序聯絡人資訊的功能
題目:用C語言模擬實現一個通訊錄,要求實現其新增、刪除、修改、查詢、模糊搜尋姓名和號碼、顯示和排序
Android 手機通訊錄開發時給聯絡人新增頭像失敗的坑
在給聯絡人新增頭像程式碼 Bitmap photo = ...; // 將 Bitmap 轉為 byte[] byte[] bytes = LshImageUtils.bitmap2Bytes(photo); // 新增聯絡人, 插入名字和頭像 (LshC
訪問通訊錄中的聯絡人和批量新增聯絡人
一、訪問通訊錄中的聯絡人(根據號碼查詢聯絡人) 主要用到資料庫(data\data\com.android.providers.contacts)中三張表,raw_contact、data、mimetypes.從第一張表獲取_id,根據_id從data表中查詢聯絡人
獲取android手機了通訊錄和sim卡聯絡人
private ArrayList<SamContact> getAllContacts(){ArrayList<SamContact> arrayList = new ArrayList<SamContact>();//獲取本機聯絡人C
Stack Overflow:研究發現訪問PHP和 Android的流量更可能來自低收入國家
收入 數據科學家 網站 mar 訪問 adf 一個 avi span Stack Overflow 的數據科學家 David Robinson 發現,軟件行業的分工讓不同發達地區的程序員依賴於不同的編程語言。軟件已經是一個全球性的行業,也有高端低端之分,最高端的是數據科
Android實現側滑-新增資料和toolbar等功能
首先是主程式碼塊 package alice.bw.com.day01zhoukao; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.Fra
Android系統編譯:新增OpenCV庫和模型配置檔案
一、新增 libopencv_java3.so庫至/system/lib64/ 在Android原始碼目錄的hardware/libgesture/目錄下建立libopencvhw資料夾,並將libo
BufferKnife8.8.1和Android ButterKnife Zelezny的新增與使用
BufferKnife主要是註解式開發,簡化開發人員開發速度,它的使用非常簡單,容易上手,下面來看看它的簡單使用吧。最新版本8.8.1,其實都差不多步驟:(使用AndroidStudio)找到專案內的build.gradle檔案dependencies {}新增depende
(轉載)Android模擬器-Genymotion的下載和新增Android虛擬系統
原地址:http://blog.csdn.net/fengshuiyue/article/details/50875210 Genymotion是一款模擬Android系統很不錯的軟體,其顯著的特點就是加快了Android系統的模擬速度,讓我們可以在電腦上體驗到使用手機
Android 內容訪問者 和 跳轉到通訊錄頁面獲取資訊
內容解析者ContentResolver 使用ContentResolver呼叫ContentProvider提供的介面,操作資料當外部應用需要對ContentProvider中的資料進行新增、刪除、修改和查詢操作時,可以使用ContentResolver 類來完成,
伺服器8080埠改為80埠(直接訪問網站不用新增埠和專案名。)
新手教材。很多人購買伺服器和域名後,全部弄好後,只能通過 ip:8080/專案名 (或者 域名:8080/專案名 )的方式進行訪問。 這裡講解的就是如何去掉埠和專案名,直接用 ip (或者
Android-如何給View新增邊框,邊框顏色和線的粗細可以自定義
一、使用場景 有時在開發中,遇到向表格形式的佈局,這時該怎麼辦? 如果只是簡單的一條橫線或者豎線,直接使用TextView控制元件,寬或者高固定1dp或者2dp,高或者寬match parent,在定義一個background="#FF0000",這樣就實現了單一的線條功能