Android开发:还原通讯录、历史通话记录、短信息记录(insert方法)

本文主要是介绍Android开发:还原通讯录、历史通话记录、短信息记录(insert方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.插入通讯录

package com.dm.restroe;import java.util.ArrayList;import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;import com.dm.util.ContactInfo;public class AddContact {//	private ArrayList<ContactInfo> CIList = new ArrayList<ContactInfo>();public static String fileName = "";public AddContact() {// TODO Auto-generated constructor stub}// CIList存储要插入的通话记录内容的类,cx是调用本方法的类的contextpublic AddContact(ArrayList<ContactInfo> CIList, Context cx) {// 用于存储联系人的地址信息String[] address;for(ContactInfo ci:CIList){// andress存的内容格式:type+"-"+poBox+"-"+postalCode+"-"+country+"-"+state+"-"+city+"-"+streetaddress = ci.getCiAddr().split("-");/*** 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId * 这时后面插入data表的数据,只有执行空值插入,才能使插入的联系人在通讯录里面可见*/ContentValues values = new ContentValues();//首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = cx.getContentResolver().insert(RawContacts.CONTENT_URI, values);long rawContactId = ContentUris.parseId(rawContactUri);//往data表插入姓名数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型values.put(StructuredName.GIVEN_NAME, ci.getCiName());cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表插入电话数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);values.put(Phone.NUMBER, ci.getPhoneNums());values.put(Phone.TYPE, Phone.TYPE_MOBILE);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表插入Email数据values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);values.put(Email.DATA, ci.getCiEmail());values.put(Email.TYPE, Email.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);//往data表插入Address数据switch(Integer.valueOf(address[0])){case 1: // TYPE_HOMEvalues.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.POBOX, address[1]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.POSTCODE, address[2]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.COUNTRY, address[3]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.REGION, address[4]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.CITY, address[5]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.STREET, address[6]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);break;case 2: // TYPE_WORKvalues.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.POBOX, address[1]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.POSTCODE, address[2]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.COUNTRY, address[3]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.REGION, address[4]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.CITY, address[5]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);values.clear();values.put(Data.RAW_CONTACT_ID, rawContactId);values.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);values.put(StructuredPostal.STREET, address[6]);values.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);cx.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);break;}}}}

package com.dm.util;import android.database.Cursor;
import android.provider.ContactsContract;public class ContactInfo {private String contactId; private String ciName;private String phoneNums;private String ciEmail;private String ciAddr;public String getContactId() {return contactId;}public void setContactId(String contactId) {this.contactId = contactId;}public String getCiName() {return ciName;}public void setCiName(String ciName) {this.ciName = ciName;}public String getPhoneNums() {return phoneNums;}public void setPhoneNums(String phoneNums) {this.phoneNums = phoneNums;}public String getCiEmail() {return ciEmail;}public void setCiEmail(String ciEmail) {this.ciEmail = ciEmail;}public String getCiAddr() {return ciAddr;}public void setCiAddr(String ciAddr) {this.ciAddr = ciAddr;}}

2.还原历史通话记录

package com.dm.restroe;import java.util.ArrayList;import com.dm.util.CallHistory;import android.content.ContentValues;
import android.content.Context;
import android.provider.CallLog;public class AddCallHistory {public static final int INCOMING_TYPE = 1;public static final int OUTGOING_TYPE = 2;public static final int MISSED_TYPE = 3;public ContentValues values = new ContentValues();// CHList存储要插入的通话记录内容的类,cx是调用本方法的类的contextpublic AddCallHistory (ArrayList<CallHistory> CHList, Context cx){/***  ch_id	Number(10)	No		通话记录id*  ch_dialing_tel 	Varchar2(255)	No		主叫人的手机号码*  ch_called_tel	Varchar2(255)	No		被叫人手机号码*  ch_call_start	date	No	sysdate	 通话开始的时间*  ch_call_end 	date	No	sysdate	通话的结束时间*  ch_calt_time	Number(10)	No		通话持续时间*  ch_talk_type	Number(1)	No		通话类型,0表示语音通话,1表示视频通话*  ch_call_type	Number(1)	No		呼叫类型,0表示呼出电话,1 表示呼入电话,2表示未接电话*  ch_du_id	Number(10)	No		用户id*  ch_insert_time	Date	No	sysdate	入库时间*  ch_remark_info	Varchar2(2048)			备注*/for(CallHistory ch:CHList){values.clear();values.put(CallLog.Calls.NUMBER, ch.getChCalledTel());  values.put(CallLog.Calls.DATE,  System.currentTimeMillis());  values.put(CallLog.Calls.DURATION, ch.getChCaltTime());  values.put(CallLog.Calls.TYPE, ch.getChNumberType());  values.put(CallLog.Calls.NEW, "0");//0已看1未看 ,由于没有获取默认全为已读cx.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);  }}
}

package com.dm.util;import android.provider.CallLog.Calls;public class CallHistory {private String chDialingTel;private String chNumberName;private String chNumberLable;private String chNumberType;private String chCaltTime;private String chId;private String chCallType;public String getChDialingTel() {return chDialingTel;}public void setChDialingTel(String chDialingTel) {this.chDialingTel = chDialingTel;}public String getChCalledTel() {return chCalledTel;}public void setChCalledTel(String chCalledTel) {this.chCalledTel = chCalledTel;}public String getChNumberName() {return chNumberName;}public void setChNumberName(String chNumberName) {this.chNumberName = chNumberName;}public String getChNumberLable() {return chNumberLable;}public void setChNumberLable(String chNumberLable) {this.chNumberLable = chNumberLable;}public String getChNumberType() {return chNumberType;}public void setChNumberType(String chNumberType) {this.chNumberType = chNumberType;}public String getChCaltTime() {return chCaltTime;}public void setChCaltTime(String chCaltTime) {this.chCaltTime = chCaltTime;}public String getChId() {return chId;}public void setChId(String chId) {this.chId = chId;}public String getChCallType() {return chCallType;}public void setChCallType(String chCallType) {this.chCallType = chCallType;}private String chCalledTel;// chCall+="\n<chTalkType>"+1+"</chTalkType>";}

3.还原短信息

package com.dm.restroe;import java.util.ArrayList;import com.dm.util.ContactInfo;
import com.dm.util.SMS;import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;public class AddShortMessage {public static Uri mSmsUri = Uri.parse("content://sms/inbox"); public final String ADDRESS = "address";  public final String DATE = "date";  public final String READ = "read";  public final String STATUS = "status";  public final String TYPE = "type";  public final String BODY = "body";  public int MESSAGE_TYPE_INBOX = 1;  public int MESSAGE_TYPE_SENT = 2;  // 用于存储联系人的地址信息public String[] smRemarkInfo;public ContentValues values = new ContentValues();  // SMSList存储要插入的通话记录内容的类,cx是调用本方法的类的context    public AddShortMessage(ArrayList<SMS> SMSList, Context cx){for(SMS sms:SMSList){values.clear();/***  smId:_id*  smFilePlace:1*  smSendTime:发送时间*  smMesContent:短信内容*  smMesSize:短信尺寸*  smCharacterCount:短信长度*  smMesType:短信类型*  smRemarkInfo:短信中心 短信主题  短信协议 是否阅读*  smAcceptTel:收信人电话*  smSendTel:发信人电话 */// smRemarkInfo:[0]短信中心 [1]短信主题  [2]短信协议 [3]是否阅读smRemarkInfo = sms.getSmRemarkInfo().split("-");;values.put(ADDRESS, sms.getSmSendTel());  values.put(BODY,  sms.getSmMesContent());  values.put(DATE, sms.getSmSendTime());         values.put(READ, smRemarkInfo[3]);  values.put(STATUS, -1);  values.put("service_center", smRemarkInfo[0]);// 收件箱if(sms.getSmMesType().equals(MESSAGE_TYPE_INBOX)){mSmsUri = Uri.parse("content://sms/inbox");values.put(TYPE, MESSAGE_TYPE_INBOX);}// 发件箱if(sms.getSmMesType().equals(MESSAGE_TYPE_SENT)){mSmsUri = Uri.parse("content://sms/sent");values.put(TYPE, MESSAGE_TYPE_SENT);}cx.getContentResolver().insert(mSmsUri, values); }}}

package com.dm.util;import java.text.SimpleDateFormat;
import java.util.Date;import android.provider.CallLog.Calls;public class SMS {private String smSendTel;private String smAcceptTel;private String smId;private String smFilePlace;private String smSendTime;private String smMesContent;private String smMesSize;private String smCharacterCount;private String smMesType;private String smRemarkInfo;public String getSmSendTel() {return smSendTel;}public void setSmSendTel(String smSendTel) {this.smSendTel = smSendTel;}public String getSmAcceptTel() {return smAcceptTel;}public void setSmAcceptTel(String smAcceptTel) {this.smAcceptTel = smAcceptTel;}public String getSmId() {return smId;}public void setSmId(String smId) {this.smId = smId;}public String getSmFilePlace() {return smFilePlace;}public void setSmFilePlace(String smFilePlace) {this.smFilePlace = smFilePlace;}public String getSmSendTime() {return smSendTime;}public void setSmSendTime(String smSendTime) {this.smSendTime = smSendTime;}public String getSmMesContent() {return smMesContent;}public void setSmMesContent(String smMesContent) {this.smMesContent = smMesContent;}public String getSmMesSize() {return smMesSize;}public void setSmMesSize(String smMesSize) {this.smMesSize = smMesSize;}public String getSmCharacterCount() {return smCharacterCount;}public void setSmCharacterCount(String smCharacterCount) {this.smCharacterCount = smCharacterCount;}public String getSmMesType() {return smMesType;}public void setSmMesType(String smMesType) {this.smMesType = smMesType;}public String getSmRemarkInfo() {return smRemarkInfo;}public void setSmRemarkInfo(String smRemarkInfo) {this.smRemarkInfo = smRemarkInfo;}
}


最后是权限设置,别忘了

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

代码不全,跟xml解析有关的部分没有贴出来~

这篇关于Android开发:还原通讯录、历史通话记录、短信息记录(insert方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573783

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操