这是一个短信筛选/批量删除的工具类程序。

首先上图:

1.展示全部系统短信。

2.新建筛选器(支持按号码筛选和按内容筛选)

3.筛选,批量删除。

主要代码:

1.获取系统全部短信

[java] view plaincopy
  1. //获取系统全部短信
  2. private List<SmsBean> getAllSms() {
  3. final String SMS_URI_ALL = "content://sms/";
  4. Uri uri = Uri.parse(SMS_URI_ALL);
  5. String[] projection = new String[]{"_id", "address", "body", "date"};
  6. Cursor cursor = getContentResolver().query(uri, projection, null, null, "date desc");
  7. int index_Id = cursor.getColumnIndex("_id");
  8. int index_Address = cursor.getColumnIndex("address");
  9. int index_Body = cursor.getColumnIndex("body");
  10. int index_Date = cursor.getColumnIndex("date");
  11. List<SmsBean> smsList = new ArrayList<SmsBean>();
  12. while (cursor.moveToNext()) {
  13. SmsBean bean = new SmsBean();
  14. bean.setId(cursor.getInt(index_Id));
  15. bean.setFromNum(cursor.getString(index_Address));
  16. bean.setContent(cursor.getString(index_Body));
  17. bean.setTime(cursor.getLong(index_Date));
  18. smsList.add(bean);
  19. }
  20. cursor.close();
  21. return smsList;
  22. }

2.添加筛选器的对话框

[java] view plaincopy
  1. //新建过滤器的对话框
  2. private void showAddFilterDialog() {
  3. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  4. builder.setTitle("添加过滤器");
  5. View view = LayoutInflater.from(this).inflate(R.layout.add_filter_dialog, null);
  6. final EditText titleET = (EditText) view.findViewById(R.id.add_filter_dialog_title);
  7. final EditText contentET = (EditText) view.findViewById(R.id.add_filter_dialog_content);
  8. final RadioButton filterPhoneNum = (RadioButton) view.findViewById(R.id.add_filter_dialog_phoneNum);
  9. filterPhoneNum.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  10. @Override
  11. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  12. contentET.setText("");
  13. if (isChecked) {
  14. contentET.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
  15. } else {
  16. contentET.setInputType(EditorInfo.TYPE_CLASS_TEXT);
  17. }
  18. }
  19. });
  20. builder.setView(view);
  21. builder.setPositiveButton("确认", null);
  22. builder.setNegativeButton("取消", null);
  23. final AlertDialog dialog = builder.create();
  24. dialog.show();
  25. //点击确定按钮时,如果输入不正确,则进行提示,不关闭对话框.所以此处不能使用普通的setPositiveButton进行事件监听
  26. dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. String title = titleET.getText().toString().trim();
  30. String content = contentET.getText().toString().trim();
  31. if (title.equals("")) {
  32. Toast.makeText(MainActivity.this, "请输入标题", Toast.LENGTH_SHORT).show();
  33. return;
  34. }
  35. if (content.equals("")) {
  36. Toast.makeText(MainActivity.this, "请输入筛选内容", Toast.LENGTH_SHORT).show();
  37. return;
  38. }
  39. dialog.dismiss();
  40. //添加至数据库
  41. DatabaseHelper helper = new DatabaseHelper(MainActivity.this);
  42. //type:筛选手机号-1,筛选短信内容-2
  43. int type = filterPhoneNum.isChecked() ? 1 : 2;
  44. FilterBean filterBean = new FilterBean(-1, title, content, type);
  45. helper.addFilter(filterBean);
  46. Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
  47. //筛选
  48. filterSms(filterBean);
  49. }
  50. });
  51. }

3.短信筛选

[java] view plaincopy
  1. //筛选符合条件的短信
  2. private void filterSms(FilterBean filterBean) {
  3. if (smsList == null) {
  4. return;
  5. }
  6. titleTV.setText(filterBean.getTitle());
  7. List<SmsBean> adapterSmsList = new ArrayList<SmsBean>();
  8. for (SmsBean sms : smsList) {
  9. String filterContent = (filterBean.getType() == 1 ? sms.getFromNum() : sms.getContent())
  10. .replace(" ", "").replace("-", "");
  11. if (checkSms(filterContent, filterBean.getContent())) {
  12. adapterSmsList.add(sms);
  13. }
  14. }
  15. adapter.setList(adapterSmsList);
  16. adapter.getSelectedMap().clear();
  17. adapter.notifyDataSetChanged();
  18. ignoreChange = true;
  19. selectAllCB.setChecked(false);
  20. ignoreChange = false;
  21. }

4.删除已选择的短信

[java] view plaincopy
  1. //删除已选择的短信
  2. private void deleteSelectedSms() {
  3. List<SmsBean> adapterList = adapter.getList();
  4. SparseBooleanArray map = adapter.getSelectedMap();
  5. final StringBuilder sb = new StringBuilder();
  6. int count = 0;
  7. for (int i = adapterList.size() - 1; i >= 0; i--) {
  8. if (map.get(i)) {
  9. sb.append(adapterList.get(i).getId());
  10. sb.append(",");
  11. //更新页面
  12. smsList.remove(adapterList.get(i));
  13. adapterList.remove(i);
  14. map.delete(i);
  15. count++;
  16. }
  17. }
  18. Toast.makeText(this, "成功删除了" + count + "条短信", Toast.LENGTH_SHORT).show();
  19. //删除
  20. new Thread(new Runnable() {
  21. @Override
  22. public void run() {
  23. String SMS_URI_ALL = "content://sms/";
  24. Uri uri = Uri.parse(SMS_URI_ALL);
  25. String whereClause = "_id in(" + sb.substring(0, sb.length() - 1) + ")";
  26. int count = getContentResolver().delete(uri, whereClause, null);
  27. System.out.println("实际删除短信" + count + "条");
  28. }
  29. }).start();
  30. }

5.为实现对Android 4.4的支持:
      Android 4.4增加了短信权限的管理,用户可以选择一个“短信程序”作为默认的短信程序,而只有默认的短信程序可以执行短信数据库“写”的功能。
     为了使自己的程序能够出现在系统设置“默认信息程序”的列表中从而供用户选择,需要在Manifest中“声明”自己的程序具备完善的信息功能,如收发短信/发彩信,当然,这些功能可以不实现(只要“声明”了即可)。

[html] view plaincopy
  1. <!--以下代码为实现在Android 4.4上删除短信。对于Android 4.4以下的设备无需这些代码。-->
  2. <!--for Android 4.4 start-->
  3. <!-- BroadcastReceiver that listens for incoming SMS messages -->
  4. <receiver
  5. android:name=".kitkatsupport.SmsReceiver"
  6. android:permission="android.permission.BROADCAST_SMS">
  7. <intent-filter>
  8. <action android:name="android.provider.Telephony.SMS_DELIVER" />
  9. </intent-filter>
  10. </receiver>
  11. <!-- BroadcastReceiver that listens for incoming MMS messages -->
  12. <receiver
  13. android:name=".kitkatsupport.MmsReceiver"
  14. android:permission="android.permission.BROADCAST_WAP_PUSH">
  15. <intent-filter>
  16. <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
  17. <data android:mimeType="application/vnd.wap.mms-message" />
  18. </intent-filter>
  19. </receiver>
  20. <!-- Activity that allows the user to send new SMS/MMS messages -->
  21. <activity android:name=".kitkatsupport.ComposeSmsActivity">
  22. <intent-filter>
  23. <action android:name="android.intent.action.SEND" />
  24. <action android:name="android.intent.action.SENDTO" />
  25. <category android:name="android.intent.category.DEFAULT" />
  26. <category android:name="android.intent.category.BROWSABLE" />
  27. <data android:scheme="sms" />
  28. <data android:scheme="smsto" />
  29. <data android:scheme="mms" />
  30. <data android:scheme="mmsto" />
  31. </intent-filter>
  32. </activity>
  33. <!-- Service that delivers messages from the phone "quick response" -->
  34. <service
  35. android:name=".kitkatsupport.HeadlessSmsSendService"
  36. android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
  37. android:exported="true">
  38. <intent-filter>
  39. <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
  40. <category android:name="android.intent.category.DEFAULT" />
  41. <data android:scheme="sms" />
  42. <data android:scheme="smsto" />
  43. <data android:scheme="mms" />
  44. <data android:scheme="mmsto" />
  45. </intent-filter>
  46. </service>
  47. <!--Android 4.4 end-->

源码下载(Android Studio项目Module)(免积分):

http://download.csdn.net/detail/books1958/8124193

Android版短信 筛选/批量删除 程序(支持Android 2.3~4.4)相关推荐

  1. Android:短信 筛选/批量删除 程序(支持Android 2.3~4.4)

    这是一个短信筛选/批量删除的工具类程序. 首先上图: 1.展示全部系统短信. 2.新建筛选器(支持按号码筛选和按内容筛选) 3.筛选,批量删除. 主要代码: 1.获取系统全部短信 //获取系统全部短信 ...

  2. iPhone苹果手机短信如何批量删除苹果iPhone手机短信?

    iPhone苹果手机短信如何批量删除苹果iPhone手机短信? 1.iPhone苹果手机短信较多,如何才能快捷的批量删除苹果iPhone手机短信. 2.打开苹果iPhone手机设置: 3.在iPhon ...

  3. android手机短信转发+隐藏应用程序图片+开机自启

  4. Android发送短信的两种方法

    Android发送短信代码的两种方法 Android发送短信代码的两种方法 有两种方法可以实现发送短信: 其一是使用intent-startActivity,URI数据格式为"smsto:n ...

  5. android编程怎么发送,Android 发送短信程序

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. mButton1.setOnClickListener(new Button.O ...

  6. Android之——短信的备份与还原

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...

  7. WEB短信平台定制 短信系统构建 路由通道搭建 web版短信后台管理系统 概括简介

    一:支持功能介绍 1:支持客户端自选通道,每个通道的条数都是独立的 2:支持通道说明,每个通道说明都是不一样的.当客户发送选择通道时在发送页面显示不同的通道说明 3:支持用户选择最后一次通道选择 4: ...

  8. Android之短信验证码

    我们今天所使用的方案只是android手机设备集成短信验证码功能的方案之一. 我们所采用的方案是使用聚合数据的短信验证sdk. 程序的界面如下所示: 实现步骤: 1.到聚合数据官网上申请短信验证SDK ...

  9. 如果收到这条短信,直接删除,是病毒!

    如果收到这条短信,直接删除,是病毒! "XXX,这是我们的照片df.tc/-"如果你的手机收到了这样一条短信,千万不要点击后面的链接,请马上删除. 点开"相片链接&quo ...

最新文章

  1. 超越对手pdf_如何创建一个超越竞争对手的移动应用
  2. 设计模式11-桥接模式
  3. 大道至简 23种模式一点就通
  4. C# 连接Oracle(利用ODP.net,不安装oracle客户端)
  5. 【CodeForces - 760B 】Frodo and pillows (二分题意,注意细节)
  6. data:image/png;base64
  7. windows无法访问指定设备_恢复 你的电脑/设备需要修改 未连接或无法访问所需设备。...
  8. jsoup教程_3 Jsoup 讲解
  9. 智能优化算法:鸽群优化算法-附代码
  10. cad快速看图能合并图纸吗_【CAD快速看图电脑版】合并图纸、2张图之间复制
  11. 土地房屋权属登记系统
  12. TP-LINK_841N_V8路由器硬改升级OpenWRT记
  13. 梦洁高端化,能解决中国人的睡眠问题吗?
  14. proc*c/c++简介
  15. 有关REST的一些内容
  16. 机器学习之随机森林RandomForestRegressor
  17. 微信小程序,几行代码实现图片瀑布流
  18. 【JZOJ B组】【NOIP2013模拟】小喵喵的新家
  19. 2010计算机一级选择题,2010年计算机一级考试选择题题库(最新版)
  20. cmake:macro、endmacro

热门文章

  1. 如何校验SQL查询结果是否准确
  2. 利用HTML做一个课程表
  3. Python四个整数排序
  4. vim设置tab为4个空格
  5. Html5 舞动的雨伞
  6. 【计算机专业】手把手教你毕业论文参考文献怎么弄
  7. AppCompat does not support the current theme features
  8. 深入了解 Oasis 网络
  9. 微信开发者工具集成GitHub,多人协调开发,上传拉取等
  10. 调整word列表缩进