IPhone / Android SMS拦截和重定向到应用程序

时间:2010-08-22 16:40:34

标签: iphone android sms intercept

是否可以拦截来自某个号码的短信并将其指向iPhone / Android上的某个应用程序进行处理? 感谢。

5 个答案:

答案 0 :(得分:1)

在Android中,您可以执行的操作是注册BroadcastReceiver以通知已收到SMS,将该消息标记为已在SMS内容提供商中读取,然后从内容提供商处删除该特定消息。这将阻止任何其他应用程序在您删除邮件后能够阅读该邮件,并且通知空间中不会显示任何通知。也就是说,我不知道接收Intent的应用程序会发生什么,表明已收到消息但无法在数据库中访问它。由于一些竞争条件,这可能导致不可预测的行为。

答案 1 :(得分:1)

是。它可以在Android中使用。我正在开发的应用程序中执行此操作。 你需要做的是:

public class SMSService extends BroadcastReceiver {
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private String phoneNumber;
private String sms;
private Context context;

@Override
public void onReceive(Context context, Intent intent) {
    this.context = context;
    if (intent.getAction().equals(SMS_RECEIVED)) {
        Bundle bundle = intent.getExtras();
        SmsMessage[] msgs = null;

        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            msgs = new SmsMessage[pdus.length];

            for (int i = 0; i < msgs.length; i++) {

                msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

                // get sms message
                sms = msgs[i].getMessageBody();

                // get phone number
                phoneNumber = msgs[i].getOriginatingAddress();

                if (phoneNumber.equals("Some other phone number")){
                    // the sms will not reach normal sms app
                    abortBroadcast();

                Thread thread = new Thread(null,
                        doBackgroundThreadProcessing, "Background");
                thread.start();
                }

            }
        }
    }
}

private Runnable doBackgroundThreadProcessing = new Runnable() {
    // do whatever you want
};

重要: 在清单文件中,您必须使用较大的数字定义SMS优先级。我相信最大值是100。

<!-- SMS Service -->
    <service android:name=".SMSService" />
    <receiver android:name=".SMSService">
        <intent-filter android:priority="100">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

答案 2 :(得分:0)

对于Android,答案是否定的。您可以实现在设备收到SMS文本消息时调用的BroadcastReceiver,但不能阻止其他应用程序(例如内置的消息应用程序)接收它们。

答案 3 :(得分:0)

对于Android,答案是

android.provider.Telephony.SMS_RECEIVED事件是有序广播,您可以调整优先级。这意味着您的应用程序将在其他人之前收到该事件。您可以取消其余广播接收器的广播。

您可以在此处找到更多信息:stackoverflow.com/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox/

答案 4 :(得分:0)

在Android中,一旦在应用程序中收到SMS消息,就可以使用Intent对象将消息的详细信息传递给另一个活动/应用程序以进行进一步处理。如果需要将消息传递给自己的应用程序,请使用sendBroadcast()方法广播Intent对象。在您的活动中,您只需要使用registerReceiver()方法来监听广播。

希望它有所帮助! 李伟萌