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. HDU3622(二分+2-SAT)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. POJ3436(KB11-A 最大流)

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8133   Accepted: 2 ...

  3. centos7下docker发布第一个微服务应用(Eureka)

    1.在windows下打包 微服务应用通过maven进行打包,在项目的pom.xml执行mvn clean package,或者直接通过idea或者eclipse进行maven打包 之上操作将在项目的 ...

  4. PHP批量导出数据为excel表格

    之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...

  5. linux vim 行缩进,批量移动多行

    显示行号用::set nu :49>5  从第49行开始,连接5行右移一个tab. :49,93>   从第49行开始到93行右移一个tab 选中多行,然后移动 https://jingy ...

  6. js 事件委托代理

    在优化网页性能的技巧当中,对DOM的优化是必不可少的.这其中就涉及到了javascript对DOM的频繁操作.比如响应用户操作的事件.一般情况下,如果是稍微初级一点的前端程序员,在拿到项目的时候,对待 ...

  7. AngularJS学习 之 创建项目

    1.本机搭建好AngularJS运行需要的环境 2.利用Yeoman来创建项目目录 以管理员身份打开cmd,输入 yo angular StockDog 然后按回车,安装进程开始会问几个问题,比如要不 ...

  8. jsp隐式对象

    隐式对象使用位置 隐式对象在转译为Servlet后,是_jspService()中的局部变量.隐式对象只能在<%与%>之间,或<%=与%>之间直接使用. 无法在<%!与% ...

  9. 耐克的定制页用canvas如何实现....跪求前端大神指点。

    选择鞋子的鞋底 鞋底会变色,也可以添加自己定制的id,这个东西看的是用canvas做的,但是小弟确实不知道怎么去做,求大神指点一二,不胜感激! nike的定制页地址:http://store.nike ...

  10. go语言练习:文件哈希

    package main import ( "crypto/sha256" "encoding/hex" "fmt" "io&qu ...