V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Lax02s
V2EX  ›  Android

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

  •  
  •   Lax02s · 227 天前 · 5005 次点击
    这是一个创建于 227 天前的主题,其中的信息可能已经有所发展或是发生改变。
    类原生系统。

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

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

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

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

    或者用 xposed 来 hook 系统的短信 APP 。
    mscsky
        9
    mscsky  
       227 天前
    用 QKSMS 就好了,不要造轮子了
    holy834
        10
    holy834  
       227 天前
    miui 有关键词黑白名单的
    noahhhh
        11
    noahhhh  
       227 天前 via Android
    1.买个通知滤盒
    2.装国内短信移植版,Android 应该是靠默认短信 app 处理垃圾短信的
    SenLief
        12
    SenLief  
       227 天前 via iPhone
    我是直接用通知滤盒一类的工具,让它已读不提醒。
    guanzhangzhang
        13
    guanzhangzhang  
       227 天前
    👀
    关键字黑名单:
    退订
    凭此短信
    填写问卷
    回 T 取关
    返现红包
    点击提现
    福利待领取
    转发无效
    白名单关键字:
    余额为
    lisxour
        14
    lisxour  
       227 天前
    @airbotgo 这应该看系统吧,关键字拦截好多都有啊
    Yzh361
        15
    Yzh361  
       227 天前 via Android
    NekoSMS
    正则表达式 匹配内容关键字、或者发送者
    realpg
        16
    realpg  
       227 天前
    用 ADUI 无此烦恼 甚至不用配置
    zachary99
        17
    zachary99  
       227 天前 via Android
    国内 UI 的拦截已经够用了,已标记的都过滤,自定义一些关键字拦截,我现在根本看不到广告短信
    luzonglinnnn
        18
    luzonglinnnn  
       226 天前
    通知滤盒
    chinni
        19
    chinni  
       226 天前 via Android
    已经无所谓了…没怎么看过短信了…验证码要发前打开等着看下就结束了…其他批量全部删除就行了
    bush911
        20
    bush911  
       218 天前
    @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>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1748 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:26 · PVG 00:26 · LAX 09:26 · JFK 12:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.