查看: 1053|回复: 0

[手机开发] Android ContentProvider查看/读取手机联系人实例

发表于 2017-8-1 08:00:04
尚学堂AD

看到某些App里面有读取联系人的功能,然后自己尝试了一下。发现这个挺简单的。然后自己就做了一个demo给大家,希望借这个demo可以让大家学习一下怎么实现读取手机联系人。

这里我用了两种方法去读取:第一张图片是跳转到系统自带的联系人界面,第二种就是直接去读取让后绑上来显示在主页面。话不多说直接上代码。

记得在AndroidManifest.xml 记得加入这两句,不然就读取不到联系人。

  1. <uses-permission android:name="android.permission.READ_CONTACTS" />
  2. <uses-permission android:name="android.permission.WRITE_CONTACTS" />
复制代码
  1. package com.example.android_contentersolver;
  2. import android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.content.DialogInterface;
  5. import android.content.Intent;
  6. import android.database.Cursor;
  7. import android.net.Uri;
  8. import android.os.Bundle;
  9. import android.provider.Contacts;
  10. import android.provider.ContactsContract;
  11. import android.telephony.PhoneStateListener;
  12. import android.telephony.TelephonyManager;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.view.ViewGroup;
  16. import android.widget.BaseAdapter;
  17. import android.widget.CheckBox;
  18. import android.widget.ListView;
  19. import android.widget.TextView;
  20. public class MainActivity extends Activity {
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main);
  25. findViewById(R.id.main_btn).setOnClickListener(new OnClickListener() {
  26. @Override
  27. public void onClick(View v) {
  28. // TODO Auto-generated method stub
  29. //查询联系人号码
  30. final Cursor cursor = getContentResolver()
  31. .query(ContactsContract.CommonDataKinds
  32. .Phone.CONTENT_URI, null, null, null, null);
  33. BaseAdapter adapter = new BaseAdapter()
  34. {
  35. @Override
  36. public int getCount()
  37. {
  38. return cursor.getCount();
  39. }
  40. @Override
  41. public Object getItem(int position)
  42. {
  43. return position;
  44. }
  45. @Override
  46. public long getItemId(int position)
  47. {
  48. return position;
  49. }
  50. @Override
  51. public View getView(int position,
  52. View convertView, ViewGroup parent)
  53. {
  54. cursor.moveToPosition(position);
  55. // CheckBox rb = new CheckBox(MainActivity.this);
  56. TextView text=new TextView(MainActivity.this);
  57. // 获取联系人的电话号码,并去掉中间的中划线、空格
  58. String number = cursor
  59. .getString(cursor.getColumnIndex(
  60. ContactsContract.CommonDataKinds
  61. .Phone.NUMBER))
  62. .replace("-", "")
  63. .replace(" ", "");
  64. // rb.setText(number);
  65. String name = cursor
  66. .getString(cursor.getColumnIndex(
  67. ContactsContract.CommonDataKinds
  68. .Phone.DISPLAY_NAME));
  69. text.setText("名字:"+name+" 电话号码:"+number);
  70. return text;
  71. }
  72. };
  73. //加载listview
  74. ListView listview=(ListView) findViewById(R.id.mian_list);
  75. listview.setAdapter(adapter);
  76. }
  77. });
  78. //跳转系统的联系人界面
  79. findViewById(R.id.main_btn_sys).setOnClickListener(new OnClickListener() {
  80. @Override
  81. public void onClick(View v) {
  82. // TODO Auto-generated method stub
  83. Intent intent=new Intent();
  84. intent.setAction(intent.ACTION_PICK);
  85. intent.setType("vnd.android.cursor.dir/phone");
  86. startActivityForResult(intent, 0x100);
  87. }
  88. });
  89. }
  90. @Override
  91. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  92. // TODO Auto-generated method stub
  93. super.onActivityResult(requestCode, resultCode, data);
  94. Uri uri=data.getData();
  95. Cursor cursor = getContentResolver()
  96. .query(uri, null, null, null, null);
  97. while(cursor.moveToNext()){
  98. String name=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.Phones.NAME));
  99. String number=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.Phones.NUMBER));
  100. TextView textview=(TextView) findViewById(R.id.mian_lists);
  101. textview.setText("名字:"+name+" 电话号码:"+number);
  102. }
  103. }
  104. }
复制代码

这是主界面

这里写图片描述

这里写图片描述

这里写图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报