小编典典

阻止传入的短信

java

我试图阻止我的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>

有人对此有任何建议吗?


阅读 284

收藏
2020-11-30

共1个答案

小编典典

从API 19(KitKat)开始,您将无法阻止传入的SMS,除非您的应用是默认的消息传递应用,即使如此,您也只能阻止将其保存到SMS Provider。

SMS_RECEIVED广播可以不再被中止,所以任何应用程序侦听它仍然会得到它。此外,默认应用仍会收到其他广播–
SMS_DELIVER其他任何应用都不会接收该广播,因此无法拦截。

如果您的应用程序是默认的SMS应用程序,则它负责将传入的消息写入SMS
Provider,因此,如果您不希望将它们保存在此处,请不要编写它们。但是,这对SMS_RECEIVED广播没有影响,广播仍将传递给已为其注册的任何应用程序,尽管这些应用程序将无法将其写入提供商。

以下博客页面讨论了SMS API的更改,并包括了有关应用程序充当默认消息传递应用程序的要求的详细信息。不过,请注意,默认应用程序负责许多事情-包括MMS-
并编写完善的消息传递客户端并不是一件容易的事。

为KitKat准备好您的SMS应用程序

2020-11-30