通话记录分析 --- 删除 之二
2018-01-02 18:30
351 查看
6.2删除通话记录
当点击确认按钮时,就开始删除选择的通话记录。MultiPickContactActivity的onClick对MODE_DEFAULT_CALL模式处理如下,
showDialog(DIALOG_DEL_CALL);
调用流程图如下,
MultiPickContactActivity的onCreateDialog对DIALOG_DEL_CALL类型处理如下,
case DIALOG_DEL_CALL: { return new AlertDialog.Builder(this).setTitle(R.string.title_del_call) .setIcon(android.R.drawable.ic_dialog_alert).setMessage( R.string.delete_call_alert).setNegativeButton( android.R.string.cancel, null).setPositiveButton( android.R.string.ok, new DeleteClickListener()).create(); }
为Dialog的PositiveButton按钮添加了DeleteClickListener 监听器。
DeleteClickListener是MultiPickContactActivity的内部类,定义如下,
private class DeleteClickListener implements DialogInterface.OnClickListener {
实现了onClick方法。
也就是说,如果在界面的Dialog点击PositiveButton,则会调用DeleteClickListener的onClick方法,该方法如下,
thread = new DeleteContactsThread(); ••• mProgressDialog.setOnCancelListener((OnCancelListener) thread); mProgressDialog.setOnKeyListener(keyListener); mProgressDialog.setProgress(0); ••• thread.start();
新建DeleteContactsThread线程并运行。设置进度条并设置监听事件。
例如,同时删除几百条通话记录,进度条会显示删除的进度,并且随时可以取消删除剩下未删除的联系人。
DeleteContactsThread是MultiPickContactActivity的内部类,继承了Thread,
private class DeleteContactsThread extends Thread implements OnCancelListener, DialogInterface.OnClickListener {
DeleteContactsThread的run方法主要逻辑如下,
1,获取mChoiceSet 对象,里面包含了删除的通话记录。
Bundle choiceSet = (Bundle) mChoiceSet.clone(); Set<String> keySet = choiceSet.keySet(); Iterator<String> it = keySet.iterator();
2, while 循环,查询通话记录,
while (!mCanceled && it.hasNext()) {
3,对MODE_DEFAULT_CALL类型处理如下,
uri = Uri.withAppendedPath(Calls.CONTENT_URI, id); builder = ContentProviderOperation.newDelete(uri); cpo = builder.build(); mOpsCalls.add(cpo);
将要删除的通话记录的uri 逐条封装在 mOpsCalls中。
4,每100条通话记录为一组,调用batchDelete方法进行逐组删除,
if (count % BATCH_DELETE_CONTACT_NUMBER == 0) { batchDelete(); } count ++;
BATCH_DELETE_CONTACT_NUMBER的值如下,
final int BATCH_DELETE_CONTACT_NUMBER = 100;
5,如果在进度条界面点击了取消按钮,或者最后一组不够100条,也是调用batchDelete方法进行删除,
batchDelete(); //删除 mOpsCalls = null; mOpsContacts = null; mProgressDialog.dismiss(); //进度条消失 finish();
batchDelete方法如下,
mContext.getContentResolver().applyBatch(CallLog.AUTHORITY, mOpsCalls); mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, mOpsContacts); mOpsCalls.clear(); mOpsContacts.clear();
调用ContentResolver的applyBatch方法进行删除。
小结:
1,首先显示所有通话记录。当然查询过程也是利用AsyncQueryHandler异步查询的。
2,然后通过Dialog和ProgressDialog 来控制删除的过程。
3,最后当然是新建DeleteContactsThread 线程 每100条为一组进行删除。
4,删除是调用的ContentResolver的applyBatch方法。
相关文章推荐
- 通话记录分析 --- 通话详情 之二
- 通话记录分析 --- 删除 之一
- 数据库-删除表中重复记录实现方法分析
- Mongodb源码分析--删除记录
- 换卡或不插卡时删除通话记录
- 仿360android打电话遮挡号码与通话后记录删除
- Android 4.0 Contacts 通话记录界面的分析(源码)
- 通话记录的查询与删除
- 删除通话记录
- 实现一键删除 windows mobile phone 通话记录
- Android 通话记录分析
- Android5.1Telecomm层通话去电流程两路进程分析之二拨号过程显示通话界面过程分析
- 实现WM下删除最后一条匹配的通话记录
- Android之通话记录的查询、删除与插入(1)
- android 通话记录的查询与删除
- Mongodb源码分析--删除记录
- Mongodb源码分析--删除记录
- Mongodb源码分析--删除记录
- 查询以及删除通话记录的内容
- 通话记录分析 --- 界面