我正在尝试使用广播接收器拦截收到的短信。这是代码:
<receiver android:name=".receivers.SmsReceiver" android:enabled="true"
android:exported="true" android:priority="999">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
和
public class SmsReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (SMS_RECEIVED.equals(intent.getAction())) {
this.abortBroadcast();
Bundle bundle = intent.getExtras();
if (bundle != null) {
// get sms objects
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus.length == 0) {
return;
}
// large message might be broken into many
SmsMessage[] messages = new SmsMessage[pdus.length];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sb.append(messages[i].getMessageBody());
}
String sender = messages[0].getOriginatingAddress();
String message = sb.toString();
Log.d("sms", sender);
Log.d("sms", message);
}
}
}
}
短信截获正常,但Android短信应用程序仍然显示其通知,我也可以在股票应用程序短信列表中找到该消息。
有没有办法阻止股票短信应用通知,并避免该消息出现在其列表中?
答案 0 :(得分:0)
您需要致电abortBroadcast();
,查看我对communication between two device using sms
如果您正在运行Android 4.4 KitKat,那么做这些事情似乎更加困难,而且我自己还没有调查过。
答案 1 :(得分:0)
正如您所说,您正在运行KitKat,然后回答是 - 您无法将默认短信应用静音。您可以同时接收消息或发送(这就是您收到消息的原因),但仍然无法“消费”消息。
答案 2 :(得分:0)
如果用户已将您的应用程序设置为默认短信应用程序,则他/她不会收到短信通知。您必须在应用程序中处理通知以及SMS的其他功能。
了解更多信息read this blog.