2015-03-08 91 views
1

我添加了手机验证短信功能到我的应用程序的注册过程,但短信写入发送和收到的短信收件箱。目前我只发送一个简单的文本来验证号码,因此在这里没有任何秘密,但它不那么用户友好,所以我想知道如果我能以某种方式阻止写这个短信。安卓 - 删除手机验证短信发送到自己

我加了abortBroadcast();如果代码是正确的,但没有效果。我使用的是Android 4.4.2,为了安全起见,我已经阅读过,没有办法做到这一点,那么有没有办法以不同的方式实现我想要的?我知道其他应用程序也能做到这样...

的代码发送短信:

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

用于消费THR短信代码:

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”意味着接收器/我的应用程序只会捕获从应用程序本身发送的短信?我不想为应用程序发送的短信浪费电池。

+0

从Android 4.4开始,只有默认的SMS应用程序对提供程序具有标准写入权限,非默认应用程序通常无法控制正在写入或删除的消息。如果你的应用只是发送一条验证消息,我不会担心试图删除它。这可能比它的价值更麻烦。 – 2015-03-08 20:11:46

+0

WhatsApp以同样的方式证实,短信没有出现在列表中 – Amos 2015-03-08 20:27:20

+0

我不确定WhatsApp是如何做到的,但是您可以让应用发送自己的数据消息,并且不会在原生应用中显示。此外,如果在验证时选择WhatsApp作为默认SMS应用程序,它可以选择不将消息写入提供商,因此它不会显示在“列表”中。 – 2015-03-08 20:36:17

回答

1

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

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

+0

非常感谢!它有帮助 – Amos 2015-03-09 08:33:58