Android 如何拦截及处理垃圾短信?

2023-09-13 08:17:55 +08:00
 Lax02s
类原生系统。

如果要结合 Tasker 写一个 Android 12 、13 系统垃圾短信拦截工具:

1 、结合 Tasker 用 JavaScript 代码实现;
2 、Android 系统提供了垃圾短信处理的接口吗?
识别如“退订”、“红包”等关键词后,将短信移到垃圾箱。

“将短信移到垃圾箱”功能需要用到哪些 Android 系统接口?
10089 次点击
所在节点    Android
20 条回复
TenProX
2023-09-13 08:25:51 +08:00
原生系统好像有自带的拦截功能哇。信息设置里面可以调。
airbotgo
2023-09-13 08:39:39 +08:00
@TenProX 自带的跟“没有”没什么区别。不提供关键词设置和拦截,垃圾短信畅行无阻。
TenProX
2023-09-13 08:40:52 +08:00
无视就好了。即使你用了短信拦截,它还是一样会出现在你的收件箱。只不过是分组了而已。
cxtrinityy
2023-09-13 09:24:19 +08:00
原生垃圾拦截也没有那么好用,虽然没看 API ,不过我估计也就是在短信数据库设了个标识,系统本身应该没有 API ,需要短信应用自己处理,甚至可能全都是短信应用这边处理的
我觉得体验最好的可能是 hook 吧,以前用 xposed 的时候研究过一阵子
huaxianyan
2023-09-13 09:29:01 +08:00
nekoyaki
2023-09-13 10:09:19 +08:00
我之前也找了好多方案或者 APP ,基本都不太行,各自有各自的问题。主要的障碍是安卓的新版本,只有默认短信 APP 才能写短信库。其他的 APP 即使能读取,也没有办法写入。以前可以装一些 xposed 插件实现外挂短信拦截,现在也懒得搞了。
现在用“短信精灵”当默认短信 APP ,界面相对比较干净,可以设置一大堆关键词,被屏蔽的短信会进入单独的一个归档而不会直接消失,万一有什么误杀也有机会看到。可以按需设置提醒或者不提醒,我现在姑且就这么用着了。
zictos
2023-09-13 10:18:11 +08:00
直接操作 mmssms.db 短信数据库文件,sqlite 数据库。

tasker 好像没找到可以删除短信的功能,chatgpt 提供的删除短信的命令是(没测试过):
adb shell content delete --uri content://sms --where "_id=短信的 ID"
不过自己直接操作数据库其实也挺方便的。你可以将垃圾短信都写入到一个文件中,然后删除它。
ShadowPower
2023-09-13 10:19:26 +08:00
很久以前( Android 4.x 时代)的安卓可以允许第三方 APP 直接读写短信,那时候有一些第三方短信拦截工具。
如今的 Android 只允许短信 APP 读写短信了(这方面比 iOS 还要封闭),但默认短信 APP 可以更换。
所以只有使用第三方短信 APP 才可能拦截短信……因此,你可以自己写一个自带拦截功能的短信 APP 。

或者用 xposed 来 hook 系统的短信 APP 。
mscsky
2023-09-13 10:44:10 +08:00
用 QKSMS 就好了,不要造轮子了
holy834
2023-09-13 13:44:52 +08:00
miui 有关键词黑白名单的
noahhhh
2023-09-13 13:55:28 +08:00
1.买个通知滤盒
2.装国内短信移植版,Android 应该是靠默认短信 app 处理垃圾短信的
SenLief
2023-09-13 16:07:23 +08:00
我是直接用通知滤盒一类的工具,让它已读不提醒。
guanzhangzhang
2023-09-13 17:45:53 +08:00
👀
关键字黑名单:
退订
凭此短信
填写问卷
回 T 取关
返现红包
点击提现
福利待领取
转发无效
白名单关键字:
余额为
lisxour
2023-09-13 18:04:11 +08:00
@airbotgo 这应该看系统吧,关键字拦截好多都有啊
Yzh361
2023-09-13 19:14:02 +08:00
NekoSMS
正则表达式 匹配内容关键字、或者发送者
realpg
2023-09-13 19:42:06 +08:00
用 ADUI 无此烦恼 甚至不用配置
zachary99
2023-09-13 19:45:29 +08:00
国内 UI 的拦截已经够用了,已标记的都过滤,自定义一些关键字拦截,我现在根本看不到广告短信
luzonglinnnn
2023-09-14 09:33:20 +08:00
通知滤盒
chinni
2023-09-14 19:02:37 +08:00
已经无所谓了…没怎么看过短信了…验证码要发前打开等着看下就结束了…其他批量全部删除就行了
bush911
2023-09-22 13:58:36 +08:00
@zictos 我在用这个 tasker 任务删除短信,供参考:

<TaskerData sr="" dvi="1" tv="6.1.32">
<Task sr="task113">
<cdate>1594959102332</cdate>
<edate>1695362269091</edate>
<id>113</id>
<nme>SMS Delete</nme>
<pri>100</pri>
<Action sr="act0" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%sms</Str>
<Str sr="arg1" ve="3">%SMSRF</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Int sr="arg5" val="3"/>
<Int sr="arg6" val="0"/>
</Action>
<Action sr="act1" ve="7">
<code>667</code>
<label>gets ID of latest sms received.</label>
<Int sr="arg0" val="2"/>
<Str sr="arg1" ve="3">content://sms</Str>
<Int sr="arg10" val="1"/>
<Str sr="arg2" ve="3"/>
<Str sr="arg3" ve="3">_id</Str>
<Str sr="arg4" ve="3">address = ?</Str>
<Str sr="arg5" ve="3">%sms</Str>
<Str sr="arg6" ve="3">date DESC limit 1</Str>
<Str sr="arg7" ve="3"/>
<Str sr="arg8" ve="3">%sms_id</Str>
<Int sr="arg9" val="0"/>
</Action>
<Action sr="act2" ve="7">
<code>137</code>
<label>stop if get ID failed.</label>
<Int sr="arg0" val="0"/>
<Str sr="arg1" ve="3"/>
<ConditionList sr="if">
<Condition sr="c0" ve="3">
<lhs>%sms_id1</lhs>
<op>13</op>
<rhs>0</rhs>
</Condition>
</ConditionList>
</Action>
<Action sr="act3" ve="7">
<code>664</code>
<label>I assume this action take the SMS ID from URI and parse it for use in the future?</label>
<Str sr="arg0" ve="3">uri</Str>
<Str sr="arg1" ve="3">Uri</Str>
<Str sr="arg2" ve="3">parse
{Uri} (String)</Str>
<Str sr="arg3" ve="3">content://sms/%sms_id1</Str>
<Str sr="arg4" ve="3"/>
<Str sr="arg5" ve="3"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Str sr="arg8" ve="3"/>
<Str sr="arg9" ve="3"/>
</Action>
<Action sr="act4" ve="7">
<code>664</code>
<label>I think this action gets the content from the parsed URI?</label>
<Str sr="arg0" ve="3">cr</Str>
<Str sr="arg1" ve="3">CONTEXT</Str>
<Str sr="arg2" ve="3">getContentResolver
{ContentResolver} ()</Str>
<Str sr="arg3" ve="3"/>
<Str sr="arg4" ve="3"/>
<Str sr="arg5" ve="3"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Str sr="arg8" ve="3"/>
<Str sr="arg9" ve="3"/>
</Action>
<Action sr="act5" ve="7">
<code>664</code>
<label>And this action is most likely the action that delete the SMS in the parsed URI.</label>
<Str sr="arg0" ve="3"/>
<Str sr="arg1" ve="3">cr</Str>
<Str sr="arg2" ve="3">delete
{int} (Uri, String, String[])</Str>
<Str sr="arg3" ve="3">uri</Str>
<Str sr="arg4" ve="3"/>
<Str sr="arg5" ve="3"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Str sr="arg8" ve="3"/>
<Str sr="arg9" ve="3"/>
</Action>
</Task>
</TaskerData>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/973199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX