阻止传入短信

时间:2016-05-07 06:21:44

标签: java android

我试图在我的Android设备中阻止所有传入的短信。

这是我正在使用的代码 -

public class SmsReceiver extends BroadcastReceiver {
/**
 * Called when the activity is first created.
 */
private static final String ACTION = "android.provider.Telephony.SEND_SMS";
public static int MSG_TPE = 0;

@Override
public void onReceive(Context context, Intent intent) {
    String MSG_TYPE = intent.getAction();
    if (MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")) {

        Bundle bundle = intent.getExtras();
        Object messages[] = (Object[]) bundle.get("pdus");
        SmsMessage smsMessage[] = new SmsMessage[messages.length];
        for (int n = 0; n < messages.length; n++) {
            smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
        }

        // show first message
        Toast toast = Toast.makeText(context, "BLOCKED Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
        toast.show();
        abortBroadcast();
        for (int i = 0; i < 8; i++) {
            Log.i("log", "Blocking SMS **********************");
        }

    } else if (MSG_TYPE.equals("android.provider.Telephony.SEND_SMS")) {
        Toast toast = Toast.makeText(context, "SMS SENT: " + MSG_TYPE, Toast.LENGTH_LONG);
        toast.show();
        abortBroadcast();
        for (int i = 0; i < 8; i++) {
            Log.i("log", "Blocking SMS **********************");
        }

    } else {

        Toast toast = Toast.makeText(context, "SIN ELSE: " + MSG_TYPE, Toast.LENGTH_LONG);
        toast.show();
        abortBroadcast();
        for (int i = 0; i < 8; i++) {
            Log.i("log", "Blocking SMS **********************");
        }

    }

}

}

清单文件 -

    <service android:name=".MyServiceSentReceived" android:enabled="true"/>

    <receiver android:name="SmsReceiver">
        <intent-filter android:priority="2147483645">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

它显示我阻止短信但是再次接收短信。所以这段代码对我不起作用。我正在关注this SO问题。

我正在考虑的其他问题是 -

Block SMS in android

Android Block Incoming SMS using BroadCastReceiver

有人对此有任何建议。

1 个答案:

答案 0 :(得分:0)

除非您的应用程序是默认的消息传递应用程序,否则您无法阻止来自API 19(KitKat)的传入SMS,即使这样您也只能阻止它们保存到SMS提供程序。

SMS_RECEIVED广播无法再中止,因此任何正在收听它的应用仍会获得它。此外,默认应用无论如何都会收到不同的广播 - SMS_DELIVER - 任何其他应用都无法接收,也无法拦截。

如果您的应用是默认的短信应用,它负责将收到的短信写入短信服务提供商,因此如果您不想将其保存在那里,请不要写。但是,这对SMS_RECEIVED广播没有任何影响,该广播仍将发送到为其注册的任何应用,但这些应用无法将其写入提供商。

以下博客页面讨论了SMS API更改,并包含有关应用程序充当默认消息传递应用程序的要求的详细信息。但要注意,默认应用程序负责很多很多事情 - 包括彩信 - 并且编写一个完整的消息传递客户端并不是一项简单的任务。

Getting Your SMS Apps Ready for KitKat