[toc]

批量插入

批量插入通话记录

下面是添加通话数据的代码,我们自己去构造Tb_calllogs数据,里面可以添加通话记录数据字段,由于是个简单的demo,所以只加了number、callType、date、callDuration。

/**

* 添加通话数据

*

* @throws RemoteException

* @throws OperationApplicationException

*/

public void addTbCalllogs() throws RemoteException, OperationApplicationException {

int calllogNumber = 0;

if (calllogEditText.getText() != null) {

calllogNumber = Integer.parseInt(calllogEditText.getText().toString());

}

if (calllogNumber == 0) {

Toast.makeText(this, "请输入正确的条数", Toast.LENGTH_SHORT).show();

return;

}

for (int i = 0; i < calllogNumber; i++) {

Tb_calllogs tb_calllogs = new Tb_calllogs(getNumber(),

getCallType(), getDate(), getCallDuration());

mTbCalllogList.add(tb_calllogs);

}

showProgressDialog();

}

生成随机号码代码如下,默认直接136开头,如果有需求可以替换成其它号码。

private String getNumber() {

StringBuilder number = new StringBuilder("136");

Random random = new Random();

for (int i = 0; i < 8; i++) {

number.append(random.nextInt(9));

}

return number.toString().toLowerCase();

}

批量添加通话记录如下,通话applyBatch()方法去批量添加

public void BatchAddCallLogs()

throws RemoteException, OperationApplicationException {

ArrayList ops = new ArrayList();

ContentValues values = new ContentValues();

for (Tb_calllogs calllog : mTbCalllogList) {

values.clear();

values.put(CallLog.Calls.NUMBER, calllog.getmNumber());

values.put(CallLog.Calls.TYPE, calllog.getmCallLogType());

values.put(CallLog.Calls.DATE, calllog.getmCallLogDate());

values.put(CallLog.Calls.DURATION, calllog.getmCallLogDuration());

values.put(CallLog.Calls.NEW, "0");

ops.add(ContentProviderOperation

.newInsert(CallLog.Calls.CONTENT_URI).withValues(values)

.withYieldAllowed(true).build());

}

if (ops != null) {

getContentResolver().applyBatch(CallLog.AUTHORITY, ops);

}

}

批量插入联系人

先构造联系人数据Tb_contacts,目前只加了name和number,代码如下

public void addTbContacts() throws RemoteException, OperationApplicationException {

int contactsNumber = 0;

if (contactsEditText.getText() != null) {

contactsNumber = Integer.parseInt(contactsEditText.getText().toString());

}

if (contactsNumber == 0) {

Toast.makeText(this, "请输入正确的条数", Toast.LENGTH_SHORT).show();

return;

}

for (int i = 0; i < contactsNumber; i++) {

Tb_contacts tb_contacts = new Tb_contacts(getName(), getNumber());

mTbContactsList.add(tb_contacts);

}

showProgressDialog();

}

生成随机汉子,随便加了两个汉子,代码如下:

private String getName() {

StringBuilder stringBuilder = new StringBuilder("");

int hightPos;

int lowPos;

Random random = new Random();

for (int i = 0; i < 2; i++) {

hightPos = (176 + Math.abs(random.nextInt(39)));

lowPos = (161 + Math.abs(random.nextInt(93)));

byte[] b = new byte[2];

b[0] = (Integer.valueOf(hightPos)).byteValue();

b[1] = (Integer.valueOf(lowPos)).byteValue();

try {

stringBuilder.append(new String(b, "GBK"));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

return stringBuilder.toString().toLowerCase();

}

批量添加到联系人,具体代码如下:

public void BatchAddContact()

throws RemoteException, OperationApplicationException {

ArrayList ops = new ArrayList();

int rawContactInsertIndex = 0;

for (Tb_contacts contact : mTbContactsList) {

rawContactInsertIndex = ops.size();

ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)

.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)

.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)

.withYieldAllowed(true).build());

// 添加姓名

ops.add(ContentProviderOperation

.newInsert(

android.provider.ContactsContract.Data.CONTENT_URI)

.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,

rawContactInsertIndex)

.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)

.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getName())

.withYieldAllowed(true).build());

// 添加号码

ops.add(ContentProviderOperation

.newInsert(

android.provider.ContactsContract.Data.CONTENT_URI)

.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,

rawContactInsertIndex)

.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)

.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getNumber())

.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)

.withValue(ContactsContract.CommonDataKinds.Phone.LABEL, "").withYieldAllowed(true).build());

}

if (ops != null) {

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

}

}

批量插入短信

同样的先构造Tb_mms数据,添加了number,smsType,smsIsRead等字段。添加短信数据如下:

private void addTbMms() throws RemoteException, OperationApplicationException {

int mmsNumber = 0;

if (mmsEditText.getText() != null) {

mmsNumber = Integer.parseInt(mmsEditText.getText().toString());

}

if (mmsNumber == 0) {

Toast.makeText(this, "请输入正确的条数", Toast.LENGTH_SHORT).show();

return;

}

for (int i = 0; i < mmsNumber; i++) {

Tb_sms tb_mms = new Tb_sms(getNumber(), getSmsType(), getSmsIsRead());

mTb_sms.add(tb_mms);

}

showProgressDialog();

}

插入短信数据代码如下:

private void insertSms() {

for (Tb_sms sms : mTb_sms) {

ContentValues values = new ContentValues();

values.put(Telephony.Sms.ADDRESS, sms.getNumber());

values.put(Telephony.Sms.DATE, System.currentTimeMillis());

long dateSent = System.currentTimeMillis() - 5000;

values.put(Telephony.Sms.DATE_SENT, dateSent);

values.put(Telephony.Sms.READ, sms.isRead());

//values.put(Telephony.Sms.SEEN, false);

values.put(Telephony.Sms.TYPE, sms.getType());

//values.put(Telephony.Sms.STATUS, Telephony.Sms.STATUS_COMPLETE);

values.put(Telephony.Sms.BODY, "您尾号为9386的招行储蓄卡收到转账1,000,000人民币");

values.put(Telephony.Sms.TYPE, Telephony.Sms.MESSAGE_TYPE_INBOX);

getContentResolver().insert(Telephony.Sms.CONTENT_URI, values);

}

}

PS: Android4.4之后,插入短信数据需要修改几个地方,在AndroidManifest.xml里面的Activity添加如下代码:

在MainActivity.java里面添加如下代码去获取默认短信应用:

defaultSmsPkg = Telephony.Sms.getDefaultSmsPackage(this);

mySmsPkg = this.getPackageName();

if (!defaultSmsPkg.equals(mySmsPkg)) {

Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);

intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, mySmsPkg);

startActivity(intent);

}

结束的时候需要在把默认的短信数据替换代码如下:

String myPackageName = getPackageName();

if (Telephony.Sms.getDefaultSmsPackage(this)

.equals(myPackageName)) {

Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);

//这里的defaultSmsApp是前面保存的

intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, defaultSmsPkg);

startActivity(intent);

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐