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 ...
随机推荐
- JavaScript高级编程——Date类型
JavaScript高级编程——Date类型 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...
- Python 并发编程(管道,事件,信号量,进程池)
管道 Conn1,conn2 = Pipe() Conn1.recv() Conn1.send() 数据接收一次就没有了 from multiprocessing import Process,Pip ...
- js-ES6学习笔记-Class(4)
1.Object.getPrototypeOf方法可以用来从子类上获取父类.因此,可以使用这个方法判断,一个类是否继承了另一个类. 2.super这个关键字,既可以当作函数使用,也可以当作对象使用.在 ...
- js获取浏览器和设备相关width(屏幕的宽度)
首先呢,我们将iPhone手机的相关数据表示如下 我们要理解很多东西,比如逻辑分辨率.物理分辨率.缩放因子.ppi等,这里先不讨论. 首先呢,我们先介绍下各个屏幕宽度: 网页可见区域宽: docume ...
- Android--根据子控件的大小自动换行的ViewGroup
1.自定义ViewGroup /** * Created by Administrator on 2016/2/26. * * --------自动换行的ViewGroup----------- */ ...
- MAC安装了mumu安卓模拟器,但无法检测到该模拟器
1.adb devices 看不到模拟器 2.adb connect 127.0.0.1:5555 3.adb kill-server 没有报错,即成功 4. adb start-server ...
- Ionic 命令
在WebStorm的设置中设置下面的命令后, 可以通过 工具 -->External Tools 中选中来执行指定脚本 C:\Windows\System32\WindowsPowerShell ...
- MemSQL 架构初探
MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...
- 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法
在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法 在Eclipse中运行Jboss时,时间太长可能有时候会出现java ...
- INNODB insert buffer 简单分析
在mysql5.1 之前称为Insert Buffer, 优化2级非唯一索引上插入操作的读IO, 在5.5之后改名为Change Buffer, 功能也扩展为2级非唯一索引上的插入.删除.更新.pur ...