IPhone/Android SMS截获并重定向到应用程序

IPhone/Android SMS截获并重定向到应用程序,iphone,android,sms,intercept,Iphone,Android,Sms,Intercept,是否有可能截获来自某个号码的短信,并将其定向到iPhone/Android上的某个应用程序进行处理? 谢谢。对于Android,答案是否定的。您可以实现一个在设备接收到短信时调用的应用程序,但不能阻止其他应用程序(例如内置的短信应用程序)接收短信。在Android中,您可以注册一个广播接收器,以收到短信的通知,在SMS内容提供商中将消息标记为已读,然后从内容提供商中删除该特定消息。这将阻止任何其他应用程序在您删除邮件后读取该邮件,并且通知空间中不会显示任何通知。也就是说,我不知道如果应用程序接收

是否有可能截获来自某个号码的短信,并将其定向到iPhone/Android上的某个应用程序进行处理?
谢谢。

对于Android,答案是否定的。您可以实现一个在设备接收到短信时调用的应用程序,但不能阻止其他应用程序(例如内置的短信应用程序)接收短信。

在Android中,您可以注册一个
广播接收器
,以收到短信的通知,在SMS内容提供商中将消息标记为已读,然后从内容提供商中删除该特定消息。这将阻止任何其他应用程序在您删除邮件后读取该邮件,并且通知空间中不会显示任何通知。也就是说,我不知道如果应用程序接收到表示已接收消息的意图,但无法访问数据库中的消息,那么会发生什么情况。这可能会由于一些竞争条件而导致不可预测的行为。

对于Android,答案是

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


您可以在此处找到更多信息:

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

希望有帮助!
李伟萌

是的。这在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
};
公共类SMSService扩展广播接收器{
公共静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
私有字符串电话号码;
私人字符串短信;
私人语境;
@凌驾
公共void onReceive(上下文、意图){
this.context=上下文;
if(intent.getAction().equals(SMS_已接收)){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(int i=0;i
重要提示: 在清单文件中,您必须用一个高的数字定义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>

android:priority的最大值为1000。请参见此处: