使用KitKat中的broadcastreceiver隐藏短信通知

时间:2014-01-05 18:10:05

标签: android sms broadcastreceiver android-4.4-kitkat

我正在尝试使用广播接收器拦截收到的短信。这是代码:

    <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短信应用程序仍然显示其通知,我也可以在股票应用程序短信列表中找到该消息。

有没有办法阻止股票短信应用通知,并避免该消息出现在其列表中?

3 个答案:

答案 0 :(得分:0)

您需要致电abortBroadcast();,查看我对communication between two device using sms

的回答

如果您正在运行Android 4.4 KitKat,那么做这些事情似乎更加困难,而且我自己还没有调查过。

答案 1 :(得分:0)

正如您所说,您正在运行KitKat,然后回答是 - 您无法将默认短信应用静音。您可以同时接收消息或发送(这就是您收到消息的原因),但仍然无法“消费”消息。

答案 2 :(得分:0)

如果用户已将您的应用程序设置为默认短信应用程序,则他/她不会收到短信通知。您必须在应用程序中处理通知以及SMS的其他功能。

了解更多信息read this blog.

结帐other blogsample app.