Android编程实现通讯录中联系人的读取,查询,添加功能示例

本文实例讲述了Android编程实现通讯录中联系人的读取,查询,添加功能。分享给大家供大家参考,具体如下:

先加二个读和写权限:

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

具体代码:

package com.eboy.test;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;
public class ContectTest extends AndroidTestCase {
  private static final String TAG = "TestContact";
  //查询所有联系人的姓名,电话,邮箱
  public void TestContact() throws Exception {
    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 contractID = cursor.getInt(0);
      StringBuilder sb = new StringBuilder("contractID=");
      sb.append(contractID);
      uri = Uri.parse("content://com.android.contacts/contacts/" + contractID + "/data");
      Cursor cursor1 = resolver.query(uri, new String[]{"mimetype", "data1", "data2"}, null, null, null);
      while (cursor1.moveToNext()) {
        String data1 = cursor1.getString(cursor1.getColumnIndex("data1"));
        String mimeType = cursor1.getString(cursor1.getColumnIndex("mimetype"));
        if ("vnd.android.cursor.item/name".equals(mimeType)) { //是姓名
          sb.append(",name=" + data1);
        } else if ("vnd.android.cursor.item/email_v2".equals(mimeType)) { //邮箱
          sb.append(",email=" + data1);
        } else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) { //手机
          sb.append(",phone=" + data1);
        }
      }
      cursor1.close();
      Log.i(TAG, sb.toString());
    }
    cursor.close();
  }
  //查询指定电话的联系人姓名,邮箱
  public void testContactNameByNumber() throws Exception {
    String number = "18052369652";
    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);
    }
    cursor.close();
  }
  //添加联系人,使用事务
  public void testAddContact() throws Exception {
    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
    ContentResolver resolver = getContext().getContentResolver();
    ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
    ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
      .withValue("account_name", null)
      .build();
    operations.add(op1);
    uri = Uri.parse("content://com.android.contacts/data");
    ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
      .withValueBackReference("raw_contact_id", 0)
      .withValue("mimetype", "vnd.android.cursor.item/name")
      .withValue("data2", "龚小永")
      .build();
    operations.add(op2);
    ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
      .withValueBackReference("raw_contact_id", 0)
      .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
      .withValue("data1", "13539777967")
      .withValue("data2", "2")
      .build();
    operations.add(op3);
    ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)
    .withValueBackReference("raw_contact_id", 0)
    .withValue("mimetype", "vnd.android.cursor.item/email_v2")
    .withValue("data1", "asdfasfad@163.com")
    .withValue("data2", "2")
    .build();
  operations.add(op4);
    resolver.applyBatch("com.android.contacts", operations);
  }
}

完整实例代码点击此处本站下载

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • android如何获取联系人所有信息

    只要是开发和手机通讯录有关的应用,总要学会获取联系人信息,每次都google很麻烦,怎么办? 写一个工具类,获取到通讯录里所有的信息并分好类,至于大家怎么用就不管了,看下代码就都明白了,虽然代码很多,但是很简单,大部分都已分类,如果有没有写上的,大家可以打开自己手机上通讯录数据库,里面的字段都有标明,用的内容提供者,因此我们只需要拿到那个字段名基本上就能取出数据了. 工具类: package com.example.test; import java.util.ArrayList; import

  • Android跳转到系统联系人及拨号或短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下:  1)直接拨打 Intent intentPhone = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)); startActivity(intentPhone); 2)跳转到拨号界面 Intent intent = newIntent(Intent.ACTION_DIAL,Uri.pa

  • Android实现获取联系人电话号码功能

    本篇文档主要记录一下获取联系人的电话号码的一种方式. 1.选择联系人 ............ //构造一个隐式的Intent,拉起联系人界面 final Intent pickIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); mSuspectButton = (Button)v.findViewById(R.id.crime_suspect); mSuspectButton.setOn

  • Android获取手机联系人的方法

    Android 获取系统联系人信息的实例 一.获取手机联系人姓名及手机号 //跳转到系统联系人应用 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); try { startActivityForResult(intent, Contacts1RequestCode); } catch (Exception e) { LogManager.e("打开联系人信息失败"

  • Android仿微信联系人列表字母侧滑控件

    仿微信联系人列表字母侧滑控件, 侧滑控件参考了以下博客: Android实现ListView的A-Z字母排序和过滤搜索功能 首先分析一下字母侧滑控件应该如何实现,根据侧滑控件的高度和字母的数量来平均计算每个字母应该占据的高度. 在View的onDraw()方法下绘制每一个字母 protected void onDraw(Canvas canvas) { super.onDraw(canvas); int height = getHeight();// 获取对应高度 int width = get

  • Android ContentProvider实现获取手机联系人功能

    在之前项目中有用到关于获取手机联系人的部分,闲置就想和大家分享一下,话不多说,上代码: java部分: package com.example.content; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle

  • Android保存联系人到通讯录的方法

    上一篇文章讲了如何获取所有联系人,这篇文章就讲下怎么保存联系人数据到本机通讯录.这里我就假设你已经拿到了要保存的联系人数据. 因为是一个工具类,所以我这里就只给一个方法了,也是很简单,但是写的没有读取联系人的数据那么多,要保存更多其实看下如何读取的就会了. 直接上源码: /** * 添加联系人到本机 * * @param context * @param contact * @return */ public static boolean addContact(Context context,

  • android利用ContentResolver访问者获取手机联系人信息

    利用ContentResolver内容访问者,获取手机联系人信息我做了两种不同的做法.第一种,直接获取所有手机联系人信息,展示在ListView中.第二种,通过Butten按钮跳转到系统的手机联系人界面,单个获取手机联系人信息,展示在ListView中,结果如下: 第一种: 第二种: 第一种:直接获取所有手机联系人信息 首先需要在AndroidManifest.xml文件中添加权限: <uses-permission android:name="android.permission.REA

  • Android编程实现通讯录中联系人的读取,查询,添加功能示例

    本文实例讲述了Android编程实现通讯录中联系人的读取,查询,添加功能.分享给大家供大家参考,具体如下: 先加二个读和写权限: <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 具体代码: package com.ebo

  • Android编程实现短信收发及语音播报提示功能示例

    本文实例讲述了Android编程实现短信收发及语音播报提示功能.分享给大家供大家参考,具体如下: 发送短信功能界面 /** * 发送短信Demo * * @description: * @author ldm * @date 2016-4-22 上午9:07:53 */ public class SmsActivity extends Activity implements OnClickListener { public static final String SMS_RECIPIENT_EX

  • Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法

    本文实例讲述了Android编程开发ScrollView中ViewPager无法正常滑动问题解决方法.分享给大家供大家参考,具体如下: 这里主要介绍如何解决ViewPager在ScrollView中滑动经常失效.无法正常滑动问题. 解决方法只需要在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPager)处理即可,重写ScrollView的onInterceptTouchEvent函数,如下: package cc.newnews.view; import an

  • Android编程实现Gallery中每次滑动只显示一页的方法

    本文实例讲述了Android编程实现Gallery中每次滑动只显示一页的方法.分享给大家供大家参考,具体如下: import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.widget.Gallery; public class DetialGallery extends

  • Android编程实现项目中异常捕获及对应Log日志文件保存功能

    本文实例讲述了Android编程实现项目中异常捕获及对应Log日志文件保存功能.分享给大家供大家参考,具体如下: 做程序开发,肯定离不开与BUG打交道,更加离不开程序异常的出现.在开发的时候,我们可以通断点调试,日志打印,异常捕获工具等方式发现或处理程序中的Exception.那客户在使用我们的应用时,程序了问题,我们怎么可以知道呢?当然,我们可以加上友盟统计等第三方工具.另外还能怎么做呢?那就是把异常信息通过文档地形式保存下来,如果用户在使用的时候程序出了异常,可以让用户把对应的日志信息发给我

  • Android编程实现ListView中item部分区域添加点击事件功能

    本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能.分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为上下两部分,分别是白色的背景和蓝色的背景,现在需要只点击蓝色的背景,才能跳转到其他界面,解决方式如下: 一开始想着是不是能在list item的布局给上层布局添加一个: android:clickable="false" android:fo

  • Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法

    本文实例讲述了Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法.分享给大家供大家参考,具体如下: 前看过网易云阅读客户端,里面的文章可以实现上下拉动实现上下翻页的效果,感觉体验效果很不错. 公司新版本项目的开发中也要求实现类似的效果,不过还好项目需求里面可以提前知道需要实现上下拉动翻页的总的页数.如果像网易那种不提前知道总的页数感觉控制好LinearLayout里面的childView应该也可以达到效果. 好记性不如烂笔头,先写下我提前知道总页

  • Android编程实现显示在标题上的进度条功能【附源码下载】

    本文实例讲述了Android编程实现显示在标题上的进度条功能.分享给大家供大家参考,具体如下: 今天我们来学习一下Android中显示在Activity标题上的进度条.在这个例子当中我们还能够学习到很多关于AsyncTask的知识. (1)准备用于显示到界面上的四张图片img01,img02,img03,img04 (2)在Activity的布局文件activity_main.xml中只定义一个线性布局LinearLayout,并为其设置一个id,代码如下: <LinearLayout xmln

  • Android 在子线程中更新UI的几种方法示例

    本文介绍了Android 在子线程中更新UI的几种方法示例,分享给大家,具体如下: 方式一:Handler和Message ① 实例化一个Handler并重写handlerMessage()方法 private Handler handler = newHandler() { public void handleMessage(Message msg) { // 处理消息 super.handleMessage(msg); switch (msg.what) { case 1: button1.

  • 在Android环境下WebView中拦截所有请求并替换URL示例详解

    需求背景 接到这样一个需求,需要在 WebView 的所有网络请求中,在请求的url中,加上一个xxx=1的标志位. 例如 http://www.baidu.com 加上标志位就变成了 http://www.baidu.com?xxx=1 寻找解决方案 从 Android API 11 (3.0) 开始,WebView 开始在 WebViewClient 内提供了这样一条 API ,如下: public WebResourceResponse shouldInterceptRequest(Web

随机推荐