android - 如何拦截带有特定文本的传入 SMS 消息?

标签 android

我想了解针对特定关键字拦截传入的 SMS 消息;例如,“嗨”,这样我就可以阅读其中包含“嗨”的短信,并在阅读完消息后将其删除,如果该消息不包含任何此类文本,则不会将其删除,而是保存在收件箱。

最佳答案

寻找广播接收器,这取决于手机上安装的应用程序,但您可以为您的应用程序提供收听消息的优先级。虽然,当显示通知时,消息不会在 SMS 数据库中,因此您需要使用 abortBroadcast() 来停止通知其他应用程序。请参见下面的示例:

public class MessageReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
             Bundle pudsBundle = intent.getExtras();
             Object[] pdus = (Object[]) pudsBundle.get("pdus");
             SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);    
             Log.i(TAG,  messages.getMessageBody());
                 if(messages.getMessageBody().contains("Hi")) {
                     abortBroadcast();
                 }
    }

您需要在 list 中声明接收者,如下所示:

 <receiver android:name="com.encima.smsreceiver.MessageReceiver" android:exported="true">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
    </intent-filter>
 </receiver>

最后,确保你在manifest中有RECEIVE_SMS的权限,希望对你有帮助!

关于android - 如何拦截带有特定文本的传入 SMS 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979540/

相关文章:

java - 有没有比使用 ArrayList 更好的方法,这样我就不会遇到 IndexOutOfBounds 异常?

Android 网络检查不可靠

android - 在谷歌地图中更改 autocomplete_fragment 的图标

Android 资源 notlong/long 标识符不起作用

Android API 由 C 还是 Java 实现?

android - android studio 中的 SignalR 集成

java - Android Adapter的convertview未更新

android - NumberSlidingPicker 无法与 Android java 项目集成

android - 将用户代理设置为使用 osmdroid API

java - 将 Vector2 乘以标量 (LibGDX)