Android - 删除发送给自己的phone验证短信

Android - delete phone verification SMS sent to self

我在我的应用程序的注册过程中添加了一个 phone 验证短信功能,但短信在短信收件箱中是按照发送和接收的形式编写的。目前我只发送一个简单的文本来验证号码所以这里没有什么秘密但是它不是那么用户友好所以我想知道我是否可以以某种方式阻止写这个短信。

我添加了 abortBroadcast();如果代码正确但没有效果。我正在使用 Android 4.4.2 并且出于安全原因我已经读过,没有办法做到这一点那么有没有办法以不同的方式实现我想要的东西?我知道其他应用确实做到了...

发送短信的代码:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(Utils.phone, null, "text", null, null);

短信消费代码:

public class SMSReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        Object[] pdus = (Object[]) bundle.get("pdus");
        SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]);
        if (messages.getMessageBody().contains("text")) {
            Toast.makeText(Utils.context,"ok",Toast.LENGTH_LONG).show();
            abortBroadcast();
        }
    }
}

这是清单:

<receiver android:name="com.tomerapp.tomerapp.utils.SMSReceiver" android:exported="false">
    <intent-filter android:priority="999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>

android:exported="false" 是否意味着 receiver/my 应用程序只会捕获从应用程序本身发送的短信?除了应用程序发送的短信,我不想浪费电池。

从 Android 4.4 (KitKat) 开始,只有被选为默认 SMS 应用的应用才具有对 Provider 的标准写入权限。如果您的应用是默认应用,则它负责编写所有传入消息和自己的传出消息,并且可以选择不这样做。

另一种可能性是使用数据消息,因为这些消息不由提供商处理,因此不会显示在其他 SMS 应用程序中。 This post 演示了如何发送数据消息,以及如何配置 BroadcastReceiver 来查找它们。