Android版短信 筛选/批量删除 程序(支持Android 2.3~4.4)
这是一个短信筛选/批量删除的工具类程序。
首先上图:
1.展示全部系统短信。
2.新建筛选器(支持按号码筛选和按内容筛选)
3.筛选,批量删除。
主要代码:
1.获取系统全部短信
- //获取系统全部短信
- private List<SmsBean> getAllSms() {
- final String SMS_URI_ALL = "content://sms/";
- Uri uri = Uri.parse(SMS_URI_ALL);
- String[] projection = new String[]{"_id", "address", "body", "date"};
- Cursor cursor = getContentResolver().query(uri, projection, null, null, "date desc");
- int index_Id = cursor.getColumnIndex("_id");
- int index_Address = cursor.getColumnIndex("address");
- int index_Body = cursor.getColumnIndex("body");
- int index_Date = cursor.getColumnIndex("date");
- List<SmsBean> smsList = new ArrayList<SmsBean>();
- while (cursor.moveToNext()) {
- SmsBean bean = new SmsBean();
- bean.setId(cursor.getInt(index_Id));
- bean.setFromNum(cursor.getString(index_Address));
- bean.setContent(cursor.getString(index_Body));
- bean.setTime(cursor.getLong(index_Date));
- smsList.add(bean);
- }
- cursor.close();
- return smsList;
- }
2.添加筛选器的对话框
- //新建过滤器的对话框
- private void showAddFilterDialog() {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("添加过滤器");
- View view = LayoutInflater.from(this).inflate(R.layout.add_filter_dialog, null);
- final EditText titleET = (EditText) view.findViewById(R.id.add_filter_dialog_title);
- final EditText contentET = (EditText) view.findViewById(R.id.add_filter_dialog_content);
- final RadioButton filterPhoneNum = (RadioButton) view.findViewById(R.id.add_filter_dialog_phoneNum);
- filterPhoneNum.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- contentET.setText("");
- if (isChecked) {
- contentET.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
- } else {
- contentET.setInputType(EditorInfo.TYPE_CLASS_TEXT);
- }
- }
- });
- builder.setView(view);
- builder.setPositiveButton("确认", null);
- builder.setNegativeButton("取消", null);
- final AlertDialog dialog = builder.create();
- dialog.show();
- //点击确定按钮时,如果输入不正确,则进行提示,不关闭对话框.所以此处不能使用普通的setPositiveButton进行事件监听
- dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String title = titleET.getText().toString().trim();
- String content = contentET.getText().toString().trim();
- if (title.equals("")) {
- Toast.makeText(MainActivity.this, "请输入标题", Toast.LENGTH_SHORT).show();
- return;
- }
- if (content.equals("")) {
- Toast.makeText(MainActivity.this, "请输入筛选内容", Toast.LENGTH_SHORT).show();
- return;
- }
- dialog.dismiss();
- //添加至数据库
- DatabaseHelper helper = new DatabaseHelper(MainActivity.this);
- //type:筛选手机号-1,筛选短信内容-2
- int type = filterPhoneNum.isChecked() ? 1 : 2;
- FilterBean filterBean = new FilterBean(-1, title, content, type);
- helper.addFilter(filterBean);
- Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show();
- //筛选
- filterSms(filterBean);
- }
- });
- }
3.短信筛选
- //筛选符合条件的短信
- private void filterSms(FilterBean filterBean) {
- if (smsList == null) {
- return;
- }
- titleTV.setText(filterBean.getTitle());
- List<SmsBean> adapterSmsList = new ArrayList<SmsBean>();
- for (SmsBean sms : smsList) {
- String filterContent = (filterBean.getType() == 1 ? sms.getFromNum() : sms.getContent())
- .replace(" ", "").replace("-", "");
- if (checkSms(filterContent, filterBean.getContent())) {
- adapterSmsList.add(sms);
- }
- }
- adapter.setList(adapterSmsList);
- adapter.getSelectedMap().clear();
- adapter.notifyDataSetChanged();
- ignoreChange = true;
- selectAllCB.setChecked(false);
- ignoreChange = false;
- }
4.删除已选择的短信
- //删除已选择的短信
- private void deleteSelectedSms() {
- List<SmsBean> adapterList = adapter.getList();
- SparseBooleanArray map = adapter.getSelectedMap();
- final StringBuilder sb = new StringBuilder();
- int count = 0;
- for (int i = adapterList.size() - 1; i >= 0; i--) {
- if (map.get(i)) {
- sb.append(adapterList.get(i).getId());
- sb.append(",");
- //更新页面
- smsList.remove(adapterList.get(i));
- adapterList.remove(i);
- map.delete(i);
- count++;
- }
- }
- Toast.makeText(this, "成功删除了" + count + "条短信", Toast.LENGTH_SHORT).show();
- //删除
- new Thread(new Runnable() {
- @Override
- public void run() {
- String SMS_URI_ALL = "content://sms/";
- Uri uri = Uri.parse(SMS_URI_ALL);
- String whereClause = "_id in(" + sb.substring(0, sb.length() - 1) + ")";
- int count = getContentResolver().delete(uri, whereClause, null);
- System.out.println("实际删除短信" + count + "条");
- }
- }).start();
- }
5.为实现对Android 4.4的支持:
Android 4.4增加了短信权限的管理,用户可以选择一个“短信程序”作为默认的短信程序,而只有默认的短信程序可以执行短信数据库“写”的功能。
为了使自己的程序能够出现在系统设置“默认信息程序”的列表中从而供用户选择,需要在Manifest中“声明”自己的程序具备完善的信息功能,如收发短信/发彩信,当然,这些功能可以不实现(只要“声明”了即可)。
- <!--以下代码为实现在Android 4.4上删除短信。对于Android 4.4以下的设备无需这些代码。-->
- <!--for Android 4.4 start-->
- <!-- BroadcastReceiver that listens for incoming SMS messages -->
- <receiver
- android:name=".kitkatsupport.SmsReceiver"
- android:permission="android.permission.BROADCAST_SMS">
- <intent-filter>
- <action android:name="android.provider.Telephony.SMS_DELIVER" />
- </intent-filter>
- </receiver>
- <!-- BroadcastReceiver that listens for incoming MMS messages -->
- <receiver
- android:name=".kitkatsupport.MmsReceiver"
- android:permission="android.permission.BROADCAST_WAP_PUSH">
- <intent-filter>
- <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
- <data android:mimeType="application/vnd.wap.mms-message" />
- </intent-filter>
- </receiver>
- <!-- Activity that allows the user to send new SMS/MMS messages -->
- <activity android:name=".kitkatsupport.ComposeSmsActivity">
- <intent-filter>
- <action android:name="android.intent.action.SEND" />
- <action android:name="android.intent.action.SENDTO" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.BROWSABLE" />
- <data android:scheme="sms" />
- <data android:scheme="smsto" />
- <data android:scheme="mms" />
- <data android:scheme="mmsto" />
- </intent-filter>
- </activity>
- <!-- Service that delivers messages from the phone "quick response" -->
- <service
- android:name=".kitkatsupport.HeadlessSmsSendService"
- android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="sms" />
- <data android:scheme="smsto" />
- <data android:scheme="mms" />
- <data android:scheme="mmsto" />
- </intent-filter>
- </service>
- <!--Android 4.4 end-->
源码下载(Android Studio项目Module)(免积分):
http://download.csdn.net/detail/books1958/8124193
Android版短信 筛选/批量删除 程序(支持Android 2.3~4.4)相关推荐
- Android:短信 筛选/批量删除 程序(支持Android 2.3~4.4)
这是一个短信筛选/批量删除的工具类程序. 首先上图: 1.展示全部系统短信. 2.新建筛选器(支持按号码筛选和按内容筛选) 3.筛选,批量删除. 主要代码: 1.获取系统全部短信 //获取系统全部短信 ...
- iPhone苹果手机短信如何批量删除苹果iPhone手机短信?
iPhone苹果手机短信如何批量删除苹果iPhone手机短信? 1.iPhone苹果手机短信较多,如何才能快捷的批量删除苹果iPhone手机短信. 2.打开苹果iPhone手机设置: 3.在iPhon ...
- android手机短信转发+隐藏应用程序图片+开机自启
- Android发送短信的两种方法
Android发送短信代码的两种方法 Android发送短信代码的两种方法 有两种方法可以实现发送短信: 其一是使用intent-startActivity,URI数据格式为"smsto:n ...
- android编程怎么发送,Android 发送短信程序
搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. mButton1.setOnClickListener(new Button.O ...
- Android之——短信的备份与还原
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...
- WEB短信平台定制 短信系统构建 路由通道搭建 web版短信后台管理系统 概括简介
一:支持功能介绍 1:支持客户端自选通道,每个通道的条数都是独立的 2:支持通道说明,每个通道说明都是不一样的.当客户发送选择通道时在发送页面显示不同的通道说明 3:支持用户选择最后一次通道选择 4: ...
- Android之短信验证码
我们今天所使用的方案只是android手机设备集成短信验证码功能的方案之一. 我们所采用的方案是使用聚合数据的短信验证sdk. 程序的界面如下所示: 实现步骤: 1.到聚合数据官网上申请短信验证SDK ...
- 如果收到这条短信,直接删除,是病毒!
如果收到这条短信,直接删除,是病毒! "XXX,这是我们的照片df.tc/-"如果你的手机收到了这样一条短信,千万不要点击后面的链接,请马上删除. 点开"相片链接&quo ...
最新文章
- 超越对手pdf_如何创建一个超越竞争对手的移动应用
- 设计模式11-桥接模式
- 大道至简 23种模式一点就通
- C# 连接Oracle(利用ODP.net,不安装oracle客户端)
- 【CodeForces - 760B 】Frodo and pillows (二分题意,注意细节)
- data:image/png;base64
- windows无法访问指定设备_恢复 你的电脑/设备需要修改 未连接或无法访问所需设备。...
- jsoup教程_3 Jsoup 讲解
- 智能优化算法:鸽群优化算法-附代码
- cad快速看图能合并图纸吗_【CAD快速看图电脑版】合并图纸、2张图之间复制
- 土地房屋权属登记系统
- TP-LINK_841N_V8路由器硬改升级OpenWRT记
- 梦洁高端化,能解决中国人的睡眠问题吗?
- proc*c/c++简介
- 有关REST的一些内容
- 机器学习之随机森林RandomForestRegressor
- 微信小程序,几行代码实现图片瀑布流
- 【JZOJ B组】【NOIP2013模拟】小喵喵的新家
- 2010计算机一级选择题,2010年计算机一级考试选择题题库(最新版)
- cmake:macro、endmacro