当前位置: 代码迷 >> Android >> Android开发:复原通讯录、历史通话记录、短信息记录(insert方法)
  详细解决方案

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

热度:16   发布时间:2016-05-01 17:55:32.0
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是调用本方法的类的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解析有关的部分没有贴出来~

  相关解决方案