繁体   English   中英

阻止传入的短信

[英]Block incoming SMS

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

它显示我阻止了短信,但再次收到了短信。 所以这段代码对我不起作用。 我正在关注这个问题。

我正在看的其他问题是-

在Android中阻止短信

Android使用BroadCastReceiver阻止传入的SMS

有人对此有任何建议吗?

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

SMS_RECEIVED广播不再可以中止,因此任何正在收听的应用程序仍将获得它。 此外,默认应用SMS_DELIVER收到其他广播SMS_DELIVER其他任何应用都不会接收,因此无法拦截。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM