【发布时间】:2015-03-08 19:49:52
【问题描述】:
我在我的应用程序的注册过程中添加了电话验证短信功能,但短信在短信收件箱中写为已发送和已接收。目前我只发送一个简单的文本来验证号码,所以这里没有什么秘密,但它不是那么用户友好,所以我想知道我是否可以以某种方式阻止这条短信被写入。
我添加了 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" 是否意味着接收方/我的应用程序只会捕获从应用程序本身发送的短信?除了应用程序发送的内容外,我不想为 SMS 浪费电池电量。
【问题讨论】:
-
从 Android 4.4 开始,只有默认 SMS 应用程序对 Provider 具有标准写入权限,非默认应用程序通常对写入或删除消息没有任何控制权。如果您的应用程序只是发送一条验证消息,我不会担心尝试删除它。这可能比它的价值更麻烦。
-
whatsapp 以同样的方式确认,短信没有出现在列表中
-
我不确定 WhatsApp 是如何做到的,但您可以让应用程序向自己发送一条数据消息,它不会显示在本机应用程序中。此外,如果在验证时选择 WhatsApp 作为默认 SMS 应用程序,它可以选择不将消息写入 Provider,因此它不会显示在“列表”中。
-
请解释“应用程序向自身发送数据消息”,
-
请添加数据短信作为答案,以便我接受