Android ContentProvider查看/读取手机联系人实例

 更新时间:2017年02月10日 08:15:28   作者:via_myra  
本篇文章主要介绍了Android ContentProvider查看/读取手机联系人实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

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

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
package com.example.android_contentersolver;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.ContactsContract;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.main_btn).setOnClickListener(new OnClickListener() { 
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        //查询联系人号码
        final Cursor cursor = getContentResolver()
            .query(ContactsContract.CommonDataKinds
            .Phone.CONTENT_URI, null, null, null, null);

         BaseAdapter adapter = new BaseAdapter()
         {
           @Override
           public int getCount()
           {
             return cursor.getCount();
           }

           @Override
           public Object getItem(int position)
           {
             return position;
           }

           @Override
           public long getItemId(int position)
           {
             return position;
           }

           @Override
           public View getView(int position,
               View convertView, ViewGroup parent)
             {
               cursor.moveToPosition(position);
//               CheckBox rb = new CheckBox(MainActivity.this);
               TextView text=new TextView(MainActivity.this);
               // 获取联系人的电话号码,并去掉中间的中划线、空格
               String number = cursor
                 .getString(cursor.getColumnIndex(
                 ContactsContract.CommonDataKinds
                 .Phone.NUMBER))
                 .replace("-", "")
                 .replace(" ", "");
//               rb.setText(number);
               String name = cursor
                   .getString(cursor.getColumnIndex(
                   ContactsContract.CommonDataKinds
                   .Phone.DISPLAY_NAME));
                text.setText("名字:"+name+"  电话号码:"+number);


               return text;
             }
         };

       //加载listview
       ListView listview=(ListView) findViewById(R.id.mian_list);
       listview.setAdapter(adapter);
      }
    });


    //跳转系统的联系人界面
    findViewById(R.id.main_btn_sys).setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent intent=new Intent();
        intent.setAction(intent.ACTION_PICK);
        intent.setType("vnd.android.cursor.dir/phone");
        startActivityForResult(intent, 0x100);
      }
    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
    Uri uri=data.getData();
    Cursor cursor = getContentResolver()
        .query(uri, null, null, null, null);
    while(cursor.moveToNext()){
      String name=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.Phones.NAME));
      String number=cursor.getString(cursor.getColumnIndexOrThrow(Contacts.Phones.NUMBER));
      TextView textview=(TextView) findViewById(R.id.mian_lists);
      textview.setText("名字:"+name+"  电话号码:"+number);
    }
  }



}

这是主界面

这里写图片描述

这里写图片描述

这里写图片描述

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

相关文章

  • android 日志文件LogUtils实例

    android 日志文件LogUtils实例

    这篇文章主要介绍了android 日志文件LogUtils实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Android startService的使用与Service生命周期案例详解

    Android startService的使用与Service生命周期案例详解

    这篇文章主要介绍了Android startService的使用与Service生命周期案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Android三种常见的图片压缩方式

    Android三种常见的图片压缩方式

    在开发中,我们经常有这样一种需求,从相册选择图片,上传到服务器。随着手机像素的不断提升,照片也是小一点的3,4兆,大一点的多大10多兆。如果直接上传原图,会增大服务器压力,所以,在上传之前对图片压缩就显得很必要了。
    2021-05-05
  • Android 自定义弹出菜单和对话框功能实例代码

    Android 自定义弹出菜单和对话框功能实例代码

    Android 开发当中,可能会存在许多自定义布局的需求,比如自定义弹出菜单(popupWindow),以及自定义对话框(Dialog)。下面通过本文给大家介绍Android 自定义弹出菜单和对话框功能实例代码,感兴趣的朋友一起看看吧
    2017-08-08
  • Android BSearchEdit 搜索结果选择框的实例代码

    Android BSearchEdit 搜索结果选择框的实例代码

    EditText搜索结果下拉框、自动or回调模式、可diy、使用超简便。这篇文章主要介绍了Android BSearchEdit 搜索结果选择框的实例代码,需要的朋友可以参考下
    2019-10-10
  • Android 自定义view实现水波纹动画效果

    Android 自定义view实现水波纹动画效果

    这篇文章主要介绍了 Android 自定义view实现水波纹动画效果的实例代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-01-01
  • 深入分析Android NFC技术 android nfc开发

    深入分析Android NFC技术 android nfc开发

    本篇文章我们对android开发中nfc技术做了全面的原理分析以及实现过程,需要的读者们一起参考一下吧。
    2017-11-11
  • flutter直接上传文件到阿里云oss

    flutter直接上传文件到阿里云oss

    上传视频到oss,之前是走后端上传到oss,会有一个问题就是我要先上传给后端,后端再上传给oss就会导致上传多次,消耗时间过长影响用户体验,所以我参考文档写了直接上传到阿里云oss获取到文件访问路径。
    2021-05-05
  • android仿即刻点赞文字部分的自定义View的示例代码

    android仿即刻点赞文字部分的自定义View的示例代码

    本篇文章主要介绍了android仿即刻点赞文字部分的自定义View的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android Studio 3.0的下载安装教程

    Android Studio 3.0的下载安装教程

    Android Studio从3.0版本新增了许多功能,当然首当其冲就是从3.0版本新增了对 Kotlin 开发语言的支持,除此之外还有其他一些新功能,今天我们主要来看看如何更新Android Studio 3.0
    2017-10-10

最新评论