我试图在我的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问题。
我正在考虑的其他问题是 -
Android Block Incoming SMS using BroadCastReceiver
有人对此有任何建议。
答案 0 :(得分:0)
除非您的应用程序是默认的消息传递应用程序,否则您无法阻止来自API 19(KitKat)的传入SMS,即使这样您也只能阻止它们保存到SMS提供程序。
SMS_RECEIVED
广播无法再中止,因此任何正在收听它的应用仍会获得它。此外,默认应用无论如何都会收到不同的广播 - SMS_DELIVER
- 任何其他应用都无法接收,也无法拦截。
如果您的应用是默认的短信应用,它负责将收到的短信写入短信服务提供商,因此如果您不想将其保存在那里,请不要写。但是,这对SMS_RECEIVED
广播没有任何影响,该广播仍将发送到为其注册的任何应用,但这些应用无法将其写入提供商。
以下博客页面讨论了SMS API更改,并包含有关应用程序充当默认消息传递应用程序的要求的详细信息。但要注意,默认应用程序负责很多很多事情 - 包括彩信 - 并且编写一个完整的消息传递客户端并不是一项简单的任务。