1. import java.io.InputStream;
  2. import org.json.JSONArray;
  3. import org.json.JSONException;
  4. import org.json.JSONObject;
  5. import android.content.ContentUris;
  6. import android.content.Context;
  7. import android.database.Cursor;
  8. import android.net.Uri;
  9. import android.provider.ContactsContract;
  10. import android.util.Log;
  11. public class CopyOfContactCollector {
  12. private static final String TAG = CopyOfContactCollector.class.getSimpleName();
  13. private static final String KEY_BIRTH = "birthday";
  14. private static final String KEY_ADDR = "address";
  15. private static final String KEY_NICKNAME = "nickname";
  16. private static final String KEY_ORG = "org";
  17. private static final String KEY_IM = "IM";
  18. private static final String KEY_NOTE = "note";
  19. private static final String KEY_EMAIL = "email";
  20. private static final String KEY_PHONE = "phone";
  21. private static final String KEY_WEBSITE = "website";
  22. private static final String KEY_PHOTO = "photo";
  23. private Context context;
  24. public CopyOfContactCollector(Context context) {
  25. this.context = context;
  26. }
  27. public void getContacts() {
  28. Cursor cursor = null;
  29. try {
  30. cursor = context.getContentResolver().query(
  31. ContactsContract.Contacts.CONTENT_URI,
  32. null,
  33. null,
  34. null,
  35. null);
  36. JSONArray contactList = new JSONArray();
  37. while (cursor.moveToNext()) {
  38. String contactId = cursor.getString(cursor
  39. .getColumnIndex(ContactsContract.Contacts._ID));
  40. int hasPhone = cursor.getInt(cursor
  41. .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
  42. String contactName = cursor.getString(cursor
  43. .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
  44. long photoId = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
  45. JSONObject item = new JSONObject();
  46. item.put("id", contactId);
  47. item.put("name", contactName);
  48. // phone
  49. if (hasPhone == 1) {
  50. this.getPhone(contactId, item);
  51. }
  52. // photo
  53. this.getPhoto(contactId, photoId, item);
  54. // email
  55. this.getEmail(contactId, item);
  56. // address
  57. this.getAddress(contactId, item);
  58. // birthdat
  59. this.getBirthday(contactId, item);
  60. // instant message
  61. this.getIM(contactId, item);
  62. // nickname
  63. this.getNickname(contactId, item);
  64. // note
  65. this.getNote(contactId, item);
  66. // org
  67. this.getOrg(contactId, item);
  68. // website
  69. this.getWebsite(contactId, item);
  70. contactList.put(item);
  71. }
  72. JSONObject data = new JSONObject();
  73. data.put("CONTACTS", contactList);
  74. data.put("TIMESTAMP", System.currentTimeMillis());
  75. System.out.println(data.toString());
  76. } catch (Exception e) {
  77. e.printStackTrace();
  78. } finally {
  79. if (cursor != null) {
  80. cursor.close();
  81. }
  82. }
  83. }
  84. private void getPhone (String contactId, JSONObject data) throws JSONException {
  85. Cursor pCur = null;
  86. try {
  87. pCur = context.getContentResolver().query(
  88. ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
  89. null,
  90. ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
  91. new String[]{contactId + ""},
  92. null);
  93. JSONArray phoneList = new JSONArray();
  94. while (pCur.moveToNext()) {
  95. int type = pCur.getInt(pCur.getColumnIndex(
  96. ContactsContract.CommonDataKinds.Phone.TYPE));
  97. String phoneType = ContactsContract.CommonDataKinds.Phone.getTypeLabel(
  98. context.getResources(), type, "").toString();
  99. String phoneNumber = pCur.getString(pCur.getColumnIndex(
  100. ContactsContract.CommonDataKinds.Phone.NUMBER));
  101. JSONObject item = new JSONObject();
  102. item.put("phone", phoneNumber);
  103. item.put("type", phoneType);
  104. phoneList.put(item);
  105. }
  106. data.put(KEY_PHONE, phoneList);
  107. } finally {
  108. if (pCur != null) {
  109. pCur.close();
  110. }
  111. }
  112. }
  113. private void getEmail (String contactId, JSONObject data) throws JSONException {
  114. Cursor emailCur = null;
  115. try {
  116. emailCur = context.getContentResolver().query(
  117. ContactsContract.CommonDataKinds.Email.CONTENT_URI,
  118. null,
  119. ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
  120. new String[]{contactId},
  121. null);
  122. JSONArray emailList = new JSONArray();
  123. while (emailCur.moveToNext()) {
  124. String email = emailCur.getString(emailCur.getColumnIndex(
  125. ContactsContract.CommonDataKinds.Email.DATA));
  126. int type = emailCur.getInt(emailCur.getColumnIndex(
  127. ContactsContract.CommonDataKinds.Email.TYPE));
  128. String emailType = ContactsContract.CommonDataKinds.Email.getTypeLabel(
  129. context.getResources(), type, "").toString();
  130. JSONObject item = new JSONObject();
  131. item.put("email", email);
  132. item.put("type", emailType);
  133. emailList.put(item);
  134. }
  135. data.put(KEY_EMAIL, emailList);
  136. } finally {
  137. if (emailCur != null) {
  138. emailCur.close();
  139. }
  140. }
  141. }
  142. private void getNote (String contactId, JSONObject data) throws JSONException {
  143. Cursor noteCur = null;
  144. try {
  145. String noteWhere =
  146. ContactsContract.Data.CONTACT_ID + " = ? AND " +
  147. ContactsContract.Data.MIMETYPE + " = ?";
  148. String[] noteWhereParams = new String[]{
  149. contactId,
  150. ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
  151. noteCur = context.getContentResolver().query(
  152. ContactsContract.Data.CONTENT_URI,
  153. null,
  154. noteWhere,
  155. noteWhereParams,
  156. null);
  157. if (noteCur.moveToFirst()) {
  158. String note = noteCur.getString(noteCur.getColumnIndex(
  159. ContactsContract.CommonDataKinds.Note.NOTE));
  160. data.put(KEY_NOTE, note);
  161. }
  162. } finally {
  163. if (noteCur != null) {
  164. noteCur.close();
  165. }
  166. }
  167. }
  168. private void getWebsite (String contactId, JSONObject data) throws JSONException {
  169. Cursor websiteCur = null;
  170. try {
  171. String where =
  172. ContactsContract.Data.CONTACT_ID + " = ? AND " +
  173. ContactsContract.Data.MIMETYPE + " = ?";
  174. String[] whereParams = new String[]{
  175. contactId,
  176. ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE};
  177. websiteCur = context.getContentResolver().query(
  178. ContactsContract.Data.CONTENT_URI,
  179. null,
  180. where,
  181. whereParams,
  182. null);
  183. if (websiteCur.moveToFirst()) {
  184. String website = websiteCur.getString(websiteCur.getColumnIndex(
  185. ContactsContract.CommonDataKinds.Website.URL));
  186. data.put(KEY_WEBSITE, website);
  187. }
  188. } finally {
  189. if (websiteCur != null) {
  190. websiteCur.close();
  191. }
  192. }
  193. }
  194. private void getIM (String contactId, JSONObject data) throws JSONException {
  195. Cursor imCur = null;
  196. try {
  197. String imWhere =
  198. ContactsContract.Data.CONTACT_ID + " = ? AND " +
  199. ContactsContract.Data.MIMETYPE + " = ?";
  200. String[] imWhereParams = new String[]{contactId,
  201. ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
  202. imCur = context.getContentResolver().query(
  203. ContactsContract.Data.CONTENT_URI,
  204. null,
  205. imWhere,
  206. imWhereParams,
  207. null);
  208. JSONArray imList = new JSONArray();
  209. while (imCur.moveToNext()) {
  210. String imName = imCur.getString(
  211. imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
  212. int type = imCur.getInt(
  213. imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));
  214. String imType = ContactsContract.CommonDataKinds.Im.getTypeLabel(
  215. context.getResources(), type, "").toString();
  216. JSONObject item = new JSONObject();
  217. item.put("imName", imName);
  218. item.put("imType", imType);
  219. imList.put(item);
  220. }
  221. data.put(KEY_IM, imList);
  222. } finally {
  223. if (imCur != null) {
  224. imCur.close();
  225. }
  226. }
  227. }
  228. private void getOrg (String contactId, JSONObject data) throws JSONException {
  229. Cursor orgCur = null;
  230. try {
  231. String orgWhere =
  232. ContactsContract.Data.CONTACT_ID + " = ? AND " +
  233. ContactsContract.Data.MIMETYPE + " = ?";
  234. String[] orgWhereParams = new String[]{contactId,
  235. ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
  236. orgCur = context.getContentResolver().query(
  237. ContactsContract.Data.CONTENT_URI,
  238. null,
  239. orgWhere,
  240. orgWhereParams,
  241. null);
  242. JSONArray orgList = new JSONArray();
  243. while (orgCur.moveToNext()) {
  244. String orgName = orgCur.getString(orgCur.getColumnIndex(
  245. ContactsContract.CommonDataKinds.Organization.DATA));
  246. String title = orgCur.getString(orgCur.getColumnIndex(
  247. ContactsContract.CommonDataKinds.Organization.TITLE));
  248. JSONObject item = new JSONObject();
  249. item.put("orgName", orgName);
  250. item.put("title", title);
  251. orgList.put(item);
  252. }
  253. data.put(KEY_ORG, orgList);
  254. } finally {
  255. if (orgCur != null) {
  256. orgCur.close();
  257. }
  258. }
  259. }
  260. private void getNickname (String contactId, JSONObject data) throws JSONException {
  261. Cursor nicknameCur = null;
  262. try {
  263. String nicknameWhere =
  264. ContactsContract.Data.CONTACT_ID + " = ? AND " +
  265. ContactsContract.Data.MIMETYPE + " = ?";
  266. String[] nicknameWhereParams = new String[]{contactId,
  267. ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE};
  268. nicknameCur = context.getContentResolver().query(
  269. ContactsContract.Data.CONTENT_URI,
  270. null,
  271. nicknameWhere,
  272. nicknameWhereParams,
  273. null);
  274. while (nicknameCur.moveToNext()) {
  275. String nickname = nicknameCur.getString(nicknameCur.getColumnIndex(
  276. ContactsContract.CommonDataKinds.Nickname.NAME));
  277. data.put(KEY_NICKNAME, nickname);
  278. break;
  279. }
  280. } finally {
  281. if (nicknameCur != null) {
  282. nicknameCur.close();
  283. }
  284. }
  285. }
  286. private void getBirthday (String contactId, JSONObject data) throws JSONException {
  287. Cursor bCur = null;
  288. try {
  289. bCur = context.getContentResolver().query(
  290. ContactsContract.Data.CONTENT_URI,
  291. new String[] {ContactsContract.CommonDataKinds.Event.DATA },
  292. ContactsContract.Data.CONTACT_ID+" = "+contactId+" AND "
  293. +ContactsContract.Data.MIMETYPE+" = '"
  294. +ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE+"' AND "
  295. +ContactsContract.CommonDataKinds.Event.TYPE+" = "
  296. +ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY,
  297. null,
  298. null);
  299. while (bCur.moveToNext()) {
  300. String birthday = bCur.getString(0);
  301. data.put(KEY_BIRTH, birthday);
  302. break;
  303. }
  304. } finally {
  305. if (bCur != null) {
  306. bCur.close();
  307. }
  308. }
  309. }
  310. /**
  311. * Get address infomation of given contact.
  312. *
  313. * @param contactId
  314. * @param data
  315. * @throws JSONException
  316. */
  317. private void getAddress (String contactId, JSONObject data) throws JSONException {
  318. Cursor postals = null;
  319. try {
  320. // address
  321. postals = context.getContentResolver().query(
  322. ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
  323. null,
  324. ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = " + contactId,
  325. null,
  326. null);
  327. int postFormattedNdx = postals.getColumnIndex(
  328. ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
  329. int postTypeNdx = postals.getColumnIndex(
  330. ContactsContract.CommonDataKinds.StructuredPostal.TYPE);
  331. int postStreetNdx = postals.getColumnIndex(
  332. ContactsContract.CommonDataKinds.StructuredPostal.STREET);
  333. JSONArray addrList = new JSONArray();
  334. while (postals.moveToNext()) {
  335. String addressType = ContactsContract.CommonDataKinds.StructuredPostal
  336. .getTypeLabel(context.getResources(), postTypeNdx, "").toString();
  337. String str1 = postals.getString(postFormattedNdx);
  338. String str2 = postals.getString(postStreetNdx);
  339. JSONObject item = new JSONObject();
  340. item.put("addressType", addressType);
  341. item.put("address", str1 + str2);
  342. addrList.put(item);
  343. }
  344. data.put(KEY_ADDR, addrList);
  345. } finally {
  346. if (postals != null) {
  347. postals.close();
  348. }
  349. }
  350. }
  351. /**
  352. * Get the photo of given contact.
  353. *
  354. * @param cr
  355. * @param id
  356. * @param photo_id
  357. * @return
  358. */
  359. private void getPhoto (String contactId, long photoId, JSONObject data) throws JSONException {
  360. Uri uri = ContentUris.withAppendedId(
  361. ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId));
  362. InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(
  363. context.getContentResolver(), uri);
  364. if (input != null) {
  365. /*Bitmap photo =  BitmapFactory.decodeStream(input);
  366. data.put(KEY_PHOTO, photo);*/
  367. } else {
  368. Log.d(TAG, "First try failed to load photo!");
  369. }
  370. byte[] photoBytes = null;
  371. Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoId);
  372. Cursor c = context.getContentResolver().query(
  373. photoUri,
  374. new String[] {ContactsContract.CommonDataKinds.Photo.PHOTO},
  375. null,
  376. null,
  377. null);
  378. try {
  379. if (c.moveToFirst()) {
  380. photoBytes = c.getBlob(0);
  381. }
  382. } catch (Exception e) {
  383. e.printStackTrace();
  384. } finally {
  385. c.close();
  386. }
  387. if (photoBytes != null) {
  388. /*Bitmap photo = BitmapFactory.decodeByteArray(photoBytes, 0, photoBytes.length);
  389. data.put(KEY_PHOTO, photo);*/
  390. } else {
  391. Log.d(TAG, "Second try also failed!");
  392. }
  393. }
  394. }

结果如下:

    1. {
    2. "TIMESTAMP": 946692989880,
    3. "CONTACTS": [
    4. {
    5. "id": "801",
    6. "phone": [
    7. {
    8. "type": "手机",
    9. "phone": "11122"
    10. },
    11. {
    12. "type": "家",
    13. "phone": "222111"
    14. }
    15. ],
    16. "org": [],
    17. "IM": [],
    18. "address": [],
    19. "email": [
    20. {
    21. "type": "工作",
    22. "email": "zhangsan@qq.com"
    23. }
    24. ],
    25. "name": "john"
    26. },
    27. {
    28. "id": "802",
    29. "org": [],
    30. "IM": [],
    31. "address": [],
    32. "email": [],
    33. "name": "jack"
    34. },
    35. {
    36. "id": "803",
    37. "phone": [
    38. {
    39. "type": "手机",
    40. "phone": "1300070302533"
    41. }
    42. ],
    43. "org": [],
    44. "IM": [],
    45. "address": [],
    46. "email": [],
    47. "name": "alex"
    48. },
    49. {
    50. "id": "1064",
    51. "birthday": "2000-01-06",
    52. "phone": [
    53. {
    54. "type": "手机",
    55. "phone": "18811112222"
    56. },
    57. {
    58. "type": "家",
    59. "phone": "18811113333"
    60. },
    61. {
    62. "type": "工作",
    63. "phone": "18811114444"
    64. }
    65. ],
    66. "IM": [
    67. {
    68. "imName": "12345678",
    69. "imType": "其他"
    70. },
    71. {
    72. "imName": "13245678",
    73. "imType": "其他"
    74. }
    75. ],
    76. "website": "www.baidu.com",
    77. "nickname": "nickname",
    78. "address": [
    79. {
    80. "address": "百度市谷歌西路10086号",
    81. "addressType": "自定义"
    82. }
    83. ],
    84. "email": [
    85. {
    86. "type": "工作",
    87. "email": "office@xxx.com"
    88. },
    89. {
    90. "type": "住宅",
    91. "email": "home@xxx.com"
    92. }
    93. ],
    94. "name": "小强",
    95. "org": [
    96. {
    97. "orgName": "三月",
    98. "title": "攻城狮"
    99. }
    100. ],
    101. "note": "comment  for test"
    102. }
    103. ]
    104. }

(转)Android 读取联系人(详细)的更多相关文章

  1. android 读取联系人

    设置读取权限 <uses-permission android:name="android.permission.READ_CONTACTS" />     <u ...

  2. Android 读取手机联系人、拨号、发送短信及长按菜单的操作

    本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...

  3. android之读取联系人信息

    联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...

  4. Android基础笔记(十四)- 内容提供者读取联系人

    利用内容提供者读取联系人 利用内容提供者插入联系人 内容观察者的原理 利用内容观察者监听系统应用数据库或者自己应用数据库的变化 利用内容提供者读取联系人 读取联系人相对于读取短信来说就复杂非常多了,我 ...

  5. 017 Android 获取手机SIM卡序列号和读取联系人

    1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...

  6. Android根据联系人姓名首字符顺序读取通讯录

      Android根据联系人姓名首字符顺序读取通讯录 版权声明:本文为Zhang Phil原创文章,欢迎转载!转载请注明出处:http://blog.csdn.net/zhangphil 本文给出了A ...

  7. Android获取联系人示例,从数据库加载,带首字母标签

    这几天打算学习下Android联系人方便的一些东西,之前稍有涉略,不过每次都是浅尝辄止. 推荐国内两个Link: http://fanfq.iteye.com/blog/779569 http://w ...

  8. Android系统联系人全特效实现(上),分组导航和挤压动画

    记得在我刚接触Android的时候对系统联系人中的特效很感兴趣,它会根据手机中联系人姓氏的首字母进行分组,并在界面的最顶端始终显示一个当前的分组.如下图所示: 最让我感兴趣的是,当后一个分组和前一个分 ...

  9. Android:联系人Contacts之ContentResolver query 参数详解

    注:本片整理自 http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人N ...

随机推荐

  1. Java集合详解3:Iterator,fail-fast机制与比较器

    Java集合详解3:Iterator,fail-fast机制与比较器 今天我们来探索一下LIterator,fail-fast机制与比较器的源码. 具体代码在我的GitHub中可以找到 https:/ ...

  2. PANDAS 数据合并与重塑(concat篇)

    转自:http://blog.csdn.net/stevenkwong/article/details/52528616

  3. 【Windows】netsh动态配置端口转发

    文章转载自傲风 使用多个虚拟机,将开发环境和工作沟通环境分开(即时通,办公系统都只能在windows下使用-),将开发环境的服务提供给外部访问时,需要在主机上通过代理配置数据转发. VirtualBo ...

  4. Highcharts 时间序列,可缩放的图表;Highcharts X 轴翻转曲线图;Highcharts 带标记曲线图

    Highcharts 时间序列,可缩放的图表 配置 图表 配置可缩放图表. chart.zoomType 指定了用户可以拖放的尺寸,用户可以通过拖动鼠标来放大,可能值是x,y或xy: var char ...

  5. This function has none of DETERMINISTIC, NO SQL解决办法

    This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): This function ...

  6. pxe自动安装

    首先我们要用到的linux的桌面模式,没有桌面模式的请自觉安装.注意要关闭防火墙 需要的支持环境,dhcp,tftp,vsftp. 1.先创建ftp的共享光盘目录 mkdir -p /var/ftp/ ...

  7. netcat 安装 及netcat 命名介绍

    netcat 安装 https://blog.csdn.net/transformer_wsz/article/details/77624087 http://www.cnblogs.com/php- ...

  8. CMDB配置资源管理数据库(理解)

    CMDB是运维自动化的基础,它为日志系统,发布系统,监控系统等运维系统(ELK,zabbix,open-falcon)提供接口函数, 第一种方式:Agent方法实现,agent不能直接访问数据库,因为 ...

  9. js中Function的apply方法与call方法理解

    最近在使用jQuery的$.each方法时很,突然想到$.each($('div'),function(index,entity){});中的这个index和entity是哪冒出来的,而且可有可无的, ...

  10. 《Drools7.0.0.Final规则引擎教程》第4章 4.4 约束(Pattern的一部分)

    4.4.3 约束(Pattern的一部分) 前面我们已经介绍了条件约束在Pattern中位置了,那么什么是条件约束呢?简单来说就是一个返回true或者false的表达式,比如下面的5小于6,就是一个约 ...