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是调用本方法的类的context public AddContact(ArrayList<ContactInfo> CIList, Context cx) { // 用于存储联系人的地址信息 String[] address; for(ContactInfo ci:CIList){ // andress存的内容格式:type+"-"+poBox+"-"+postalCode+"-"+country+"-"+state+"-"+city+"-"+street address = 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_HOME values.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_WORK values.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是调用本方法的类的context public 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解析有关的部分没有贴出来~