我在我的应用程序的注册过程中添加了手机验证短信功能,但是短信是在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”表示接收器/我的应用程序只会捕获从应用程序本身发送的短信吗?除了应用程序发送的内容之外,我不想浪费电池。
答案 0 :(得分:1)
从Android 4.4(KitKat)开始,只有选择作为默认SMS应用程序的应用程序才具有对提供程序的标准写入权限。如果您的应用程序是默认应用程序,它负责编写所有传入和自己的传出消息,并且可以选择不这样做。
另一种可能性是使用数据消息,因为这些消息不由提供商处理,因此不会在其他SMS应用程序中显示。 This post演示了如何发送数据消息,以及如何配置BroadcastReceiver以查找它们。