Android - 删除手机验证短信发送给自己

时间:2015-03-08 19:49:53

标签: android sms

我在我的应用程序的注册过程中添加了手机验证短信功能,但是短信是在SMS收件箱中发送和接收的。目前我只发送一个简单的文本只是为了验证这个数字,所以这里没什么秘密,但它不是那么用户友好,所以我想知道我是否能以某种方式阻止写这条短信。

我添加了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”表示接收器/我的应用程序只会捕获从应用程序本身发送的短信吗?除了应用程序发送的内容之外,我不想浪费电池。

1 个答案:

答案 0 :(得分:1)

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

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