Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人
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卡),向手机通讯录中插入联系人的更多相关文章
- android获取通讯记录,sim卡和手机
//获取手机和手机卡通讯录 public static String getContacts() { String szContacts = ""; szContacts=getP ...
- 请问下mtk双卡手机怎样发短信是怎样选择sim卡来发(双卡都可用的情况下)?
如题,我如今可以获取双卡状态,当仅仅有单一卡的时候可以指定sim卡进行发短信,可是双卡都可用的情况下,程序就默认使用卡1发短信了.即使指定了sim卡编号.
- android131 360 05 手势触摸滑动,sim卡,开机启动的广播,手机联系人,SharedPreferences,拦截短信
安卓手势触摸滑动: package com.itheima52.mobilesafe.activity; import android.app.Activity; import android.con ...
- simtrace之探秘SIM卡中的世界
0×00 关于SIM卡 众所周知SIM卡是一张插在手机上的小卡,其全称为Subscriber Identity Module 客户识别模块.不过,这个世界上并没有多少人知道SIM卡中的操作系统是基于j ...
- 手机SIM卡知识大科普
SIM卡 SIM卡是(Subscriber Identity Module 客户识别模块)的缩写,也称为智能卡.用户身份识别卡,GSM数字移动电话机必须装上此卡方能使用.它在一电脑芯片上存储了数字移动 ...
- 手机SIM卡无法识别解决方案
SIM卡是工作中测试用的,经常插拔到不同的手机,前两天SIM卡放到手机中都能正常识别,今天插入到另一款手机中发现无法识别.心里糟了,是不是卡坏了,根据之 前的直觉,在公司找了一块橡皮,在SIM卡的芯片 ...
- 开发中,android手机WIFI无法使用,无SIM卡故障解决
用eclipse 开发android中,突然出现,android手机WIFI无法使用,无SIM卡故障解决 发现故障后,想办法刷机(没有成功),触点清洁都搞了. 最后恢复出厂设置居然解决了,留资料给同行 ...
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录的实现以及ListView的优化
Android实训案例(五)--四大组件之一ContentProvider的使用,通讯录的实现 Android四大组件是啥这里就不用多说了,看图吧,他们之间通过intent通讯 我们后续也会一一的为大 ...
- TelephonyManager类:Android手机及Sim卡状态的获取
TelephonyManager这个类很有用,可以得到很多关于手机和Sim卡的信息. 直接上注释后的代码,请享用 package net.sunniwell.app;import android.ap ...
随机推荐
- 【 js 性能优化】【源码学习】underscore throttle 与 debounce 节流
在看 underscore.js 源码的时候,接触到了这样两个方法,很有意思: 我先把实现的代码撂在下面,看不懂的可以先跳过,但是跳过可不是永远跳过哦- 一个是 throttle: _.throttl ...
- JavaScript--DOM进阶(20)
// DOM自身存在很多类型,在上一章中有介绍,比如Element类型:表示的是元素节点;再比如Text类型;表示的是文本节点; 一 DOM类型 类型名 说明 Node 表示所有类型值的统一接口,IE ...
- python实现贪婪算法解决01背包问题
一.背包问题 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn.01背包是背包问题中最简单的问题.01背包的约束条件是给定几种物 ...
- console.log-对象引用
现象 现象1 利用简单的例子描述下 打印出的结果为 很明显可以看出,对象在打印之后改变,但最终结果还是改变后的值,因此console.log保存的事对象的引用. 现象2 但是,在debugger的过程 ...
- CSS3 鼠标划上图片放大
td img{transition: all 1s}/*鼠标划上,图片1s全部显示完成*/ td img:hover{ transform: scale(5) translateX(50%) tran ...
- Oracle 远程链接oracle数据库服务器的配置
远程链接oracle数据库服务器的配置 by:授客 QQ:1033553122 原理: 一.Oracle客户端与服务器端的通讯机制 1.OracleNet协议 如下图所示,Oracle通过Oracle ...
- 创建一个OpenGL窗口
在上节课Windows10+VS2017 用GLFW+GLAD 搭建OpenGL开发环境 中,我们搭建好了OpenGL开发环境.这节课编写代码去测试开发环境. 还是用上节课创建的OpenGL项目,右击 ...
- 类与接口(二)java的四种内部类详解
引言 内部类,嵌套在另一个类的里面,所以也称为 嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...
- Mac日常使用问题
问题一: macbook如何关闭safari左侧书签栏? 方法1: 快捷键:control+command+1键 办法2: 把光标移到safari顶部, 菜单单出来后, 选择view-->sho ...
- WebStorm 中 dva 项目用 start 命令需要不断重启项目问题
问题: 用dva-cli 构建的项目,用webstorm进行开发,通过 npm start进行启动,经常修改了文件之后,浏览器里面的内容没有刷新,需要重新执行npm start才行. 解决办法: we ...