package com.example.myapi.phonepersion;

import java.util.ArrayList;
import java.util.List; import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.RawContacts.Data;
import android.util.Log; import com.example.myapi.bean.Person; /**
* 获取手机通讯录联系人,帮助类
* @author tony
*
*/
public class PhonePersionUtils {
private PhonePersionUtils(){}
private static PhonePersionUtils instance;
public static PhonePersionUtils getInstance(){
synchronized (PhonePersionUtils.class) {
if(instance == null){
instance = new PhonePersionUtils();
}
}
return instance;
}
/**
* 获取所有的联系人
* @return
*/
public List<Person> getAllPerson(Context context){
List<Person> ps = new ArrayList<Person>();
try{
Cursor cur = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null);
if(cur!=null){
while(cur.moveToNext()){
Person p = new Person();
String phoneNum = cur.getString(cur.getColumnIndex(Phone.NUMBER));
String name = cur.getString(cur.getColumnIndex(Phone.DISPLAY_NAME));
p.setName(name);
p.setPhone(phoneNum);
ps.add(p);
}
}
cur.close();
}catch(Exception e){
Log.e("getAllPerson", e.getMessage());
} return ps;
} /**
* 获取SIM卡中的联系人
* @param context
*/
public List<Person> getSIMContacts(Context context) {
List<Person> ps = new ArrayList<Person>();
ContentResolver resolver = context.getContentResolver();
// 获取Sims卡联系人
Uri uri = Uri.parse("content://icc/adn");
Cursor cur = resolver.query(uri,
null,null,null,null);
if (cur != null) {
while (cur.moveToNext()) {
Person p = new Person();
String phoneNum = cur.getString(cur.getColumnIndex(Phone.NUMBER));
String name = cur.getString(cur.getColumnIndex(Phone.DISPLAY_NAME));
p.setName(name);
p.setPhone(phoneNum);
ps.add(p); }
cur.close();
}
return ps;
} /**
* 向手机通讯录中添加联系人
* @return
*/
public void add(Context context){
ContentValues values = new ContentValues();
// 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的raw_id
Uri uri = context.getContentResolver().insert(RawContacts.CONTENT_URI, values);
long raw_id = ContentUris.parseId(uri);
// 往data表入姓名数据
values.clear();
values.put(Data.RAW_CONTACT_ID, raw_id);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 内容类型
values.put(StructuredName.GIVEN_NAME, "yw");
context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI,values);
// 往data表入电话数据
values.clear();
values.put(Data.RAW_CONTACT_ID, raw_id);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);// 内容类型
values.put(Phone.NUMBER, "");
values.put(Phone.TYPE, Phone.TYPE_MOBILE);context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI,values);
// 往data表入Email数据
values.clear();
values.put(Data.RAW_CONTACT_ID, raw_id);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);// 内容类型
values.put(Email.DATA, "3747678797@xxx.com");
values.put(Email.TYPE, Email.TYPE_WORK);
context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI,values);
}
}

需要添加的权限:

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

希望对大家有帮助。

Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人的更多相关文章

  1. android获取通讯记录,sim卡和手机

    //获取手机和手机卡通讯录 public static String getContacts() { String szContacts = ""; szContacts=getP ...

  2. 请问下mtk双卡手机怎样发短信是怎样选择sim卡来发(双卡都可用的情况下)?

    如题,我如今可以获取双卡状态,当仅仅有单一卡的时候可以指定sim卡进行发短信,可是双卡都可用的情况下,程序就默认使用卡1发短信了.即使指定了sim卡编号.

  3. android131 360 05 手势触摸滑动,sim卡,开机启动的广播,手机联系人,SharedPreferences,拦截短信

    安卓手势触摸滑动: package com.itheima52.mobilesafe.activity; import android.app.Activity; import android.con ...

  4. simtrace之探秘SIM卡中的世界

    0×00 关于SIM卡 众所周知SIM卡是一张插在手机上的小卡,其全称为Subscriber Identity Module 客户识别模块.不过,这个世界上并没有多少人知道SIM卡中的操作系统是基于j ...

  5. 手机SIM卡知识大科普

    SIM卡 SIM卡是(Subscriber Identity Module 客户识别模块)的缩写,也称为智能卡.用户身份识别卡,GSM数字移动电话机必须装上此卡方能使用.它在一电脑芯片上存储了数字移动 ...

  6. 手机SIM卡无法识别解决方案

    SIM卡是工作中测试用的,经常插拔到不同的手机,前两天SIM卡放到手机中都能正常识别,今天插入到另一款手机中发现无法识别.心里糟了,是不是卡坏了,根据之 前的直觉,在公司找了一块橡皮,在SIM卡的芯片 ...

  7. 开发中,android手机WIFI无法使用,无SIM卡故障解决

    用eclipse 开发android中,突然出现,android手机WIFI无法使用,无SIM卡故障解决 发现故障后,想办法刷机(没有成功),触点清洁都搞了. 最后恢复出厂设置居然解决了,留资料给同行 ...

  8. Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化

    Android实训案例(五)--四大组件之一ContentProvider的使用,通讯录的实现 Android四大组件是啥这里就不用多说了,看图吧,他们之间通过intent通讯 我们后续也会一一的为大 ...

  9. TelephonyManager类:Android手机及Sim卡状态的获取

    TelephonyManager这个类很有用,可以得到很多关于手机和Sim卡的信息. 直接上注释后的代码,请享用 package net.sunniwell.app;import android.ap ...

随机推荐

  1. linux系统编程:用truncate调整文件大小

    truncate的使用非常简单: int truncate(const char *path, off_t length); 参数1:文件名 参数2:  文件需要被调整的大小 length 大于 文件 ...

  2. 3.配置Spring+SpringMvc+Mybatis(分库or读写分离)--Intellij IDAE 2016.3.5

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 建立好maven多模块项目后,开始使用ssm传统的框架:http://www.cnblogs.com/yysbol ...

  3. JAVA中销毁session的代码

    ServletActionContext.getRequest().getSession().invalidate();

  4. Python 基于Python实现邮件发送

    基于Python实现邮件发送   by:授客 QQ:1033553122 测试环境: Python版本:Python 2.7   注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分 ...

  5. 2018-10-23 23:29:54 clanguage

    2018-10-23   23:29:54 clanguage 在 32 位环境以及 Win64 环境下的运行结果为: short=2, int=4, long=4, char=1 在 64 位 Li ...

  6. [Android] 仿照 Last App Switcher 写的小程序

      在Android众多工具类app中,Last App Switcher绝对算是一个让人用过就不会卸载的工具.LAS这个应用,它的功能很简单,就是通过一个浮动按钮实现在两个应用之间一键切换,但是非常 ...

  7. springboot 学习之路 14(整合mongodb的Api操作)

    springboot整合mongodb: mongodb的安装和权限配置  请点击连接参考 mongodb集成 : 第一步:引如pom文件 第二步:配置文件配置mongodb路径: 第三步:关于mon ...

  8. python3+unittest+HTMLTestRunner

    参考博客1 参考博客2 python3版HTMLTestRunner.py见博客园‘链接’(已经上传到博客园) import unittest class operatinon_unittest(un ...

  9. 留言板0.4_model中的数据库(1)

    1.先在数据库中加入一天测试数据先 2.在model的"views"中载入数据库和model的类 import pymysql from .models import UserMe ...

  10. android dev概念快速入门

    apk: android将源代码依赖库等经过编译后打包分发的应用. 打包详细过程如下: android-studio安装 由于google被qiang,需要制定proxy,可以使用sock,同时安装完 ...