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. js同时获取多个同name的input框的值

    demo代码 <!doctype html> <html ng-app="a3_4"> <head> <title>表头排序< ...

  2. 微信公众号获取acess_token并存储(php)

    <?php define("appid", "你的appid"); define("appsecret", "你的appse ...

  3. CentOS7下安装caffe(包括ffmpeg\boost\opencv)

    因为有项目想采用深度学习,而caffe是深度学习框架中比较理想的一款,并且跨平台,以及可以采用python/matlab的方式进行调用等优势,所以想在服务器上安装,下面就开始了血泪史... 服务器是阿 ...

  4. hadoop重启后,hdfs目录权限问题

    今天重启了下Hadoop集群,使用Eclipse调试hdfs api的时候报错: [WARNING] java.lang.NullPointerException at org.conan.kafka ...

  5. Python实现屏幕截图的两种方式

    Python实现屏幕截图的两种方式 使用windows API 使用PIL中的ImageGrab模块 下面对两者的特点和用法进行详细解释. 一.Python调用windows API实现屏幕截图 好处 ...

  6. Python之密度聚类

    # -*- coding: utf-8 -*- """ Created on Tue Sep 25 10:48:34 2018 @author: zhen "& ...

  7. C# WinForm中添加用户控件

    转:https://blog.csdn.net/haelang/article/details/40681003 有的时候我们需要频繁使用一些系统默认工具的组合,那么就可以使用自定义用户控件. 起一个 ...

  8. RBAC用户权限管理数据库设计【转载】

    本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...

  9. python Pipe 双管道通信

    管道:是python多进程中一种交换数据的方式 from multiprocessing import Process,current_process,Queue,Pipe import time i ...

  10. windows中VirtualBox调整扩大VMDK格式的磁盘空间

    今日为了学习(zhuangX),在家中电脑上安装了VirtualBox的虚拟机,为了兼容性,选择了VMDK磁盘格式,想起办公室的电脑,在系统配置完成后,一直提示磁盘空间不足,尴尬了,重新装?环境啥的都 ...