当前位置: 首页 > 面试题库 >

阻止传入的短信

阎俊英
2023-03-14
问题内容

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

有人对此有任何建议吗?


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 只要我的应用程序正在运行,我就想阻止传入的SMS消息。我可以实现,但是问题是在我关闭该应用程序甚至重新启动甚至卸载它之后,用户将不再能够接收SMS消息。因此,如何使应用程序仅在运行中以及关闭或卸载后才阻止传入的SMS。以停止阻止SMS。这是我的代码: BroadCastReceiver.Java MainActivity.java 体现: 注意:我已经在android模拟器“使用Tel

  • 问题内容: 只要我的应用程序正在运行,我就想阻止传入的SMS消息。我 可以实现,但是问题是在我关闭该应用程序甚至重启 甚至卸载它之后,用户将不再能够接收SMS消息。 因此,如何使应用程序仅在运行时 以及关闭或卸载后才阻止传入的SMS,以停止阻止SMS。这是我的 代码: BroadCastReceiver.Java MainActivity.java Manifiest : 注意:我已经在andro

  • 问题内容: 我对Go如何处理非阻塞IO感到困惑。API在我看来基本上是同步的,并且在Go上观看演示时,听到诸如“和调用块”之类的注释并不罕见。 从文件或网络读取时,Go是否使用阻塞IO?还是当在Go Routine中使用某种魔术来重写代码? 来自C#背景,这感觉非常不直观,在C#中,当使用异步API时我们使用了关键字。这清楚地表明,API可以产生当前线程,并在以后的延续中继续。 因此,TLDR;当

  • 如果一个函数不能抛出异常,或者一个程序并没有接获某个函数所抛出的异常并进行处理,那么这个函数可以用新的noexcept关键字对其进行修饰,表示这个函数不会抛出异常或者抛出的异常不会被接获并处理。例如: extern "C" double sqrt(double) noexcept; // 永远不会抛出异常 vector my_computation(const vector& v) noe

  • manifest.xml中有以下接收器 它在Nexus 5上工作得很好,但在三星却不行,任何人都知道如何在三星工作

  • 我有一个装在Docker容器中的NodeJS应用程序,我可以通过它向<code>smtp.gmail发送电子邮件。com(使用<code>nodeEmailer从Ubuntu容器中使用docker exec…,ping工作正常。我想知道是什么问题。详情如下:- 我的 Macbook: < li >操作系统:MacOS High Sierra(版本10.13.6) < li>Docker:版本18.