Перехват и переадресация SMS на iPhone / Android в приложение - PullRequest
1 голос
/ 22 августа 2010

Можно ли перехватить SMS, пришедшее с определенного номера, и направить его в определенное приложение на iPhone / Android, где оно будет обрабатываться? Спасибо.

Ответы [ 5 ]

1 голос
/ 11 июня 2012

Да.Это возможно в 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>
1 голос
/ 23 августа 2010

В Android вы можете зарегистрировать BroadcastReceiver, чтобы получать уведомления о получении SMS-сообщения, пометить сообщение как прочитанное в поставщике содержимого SMS, а затем удалить это конкретное сообщение из поставщика содержимого.Это предотвратит прочтение сообщения другими приложениями после его удаления, и в области уведомлений уведомления не будут отображаться.Тем не менее, я понятия не имею, что произойдет с приложениями, которые получают намерение, указывающее, что сообщение было получено, но затем не может получить к нему доступ в базе данных.Это может привести к непредсказуемому поведению в результате ряда условий гонки.

0 голосов
/ 15 мая 2011

В Android, получив SMS-сообщение в своем приложении, вы можете использовать объект Intent для передачи сведений о сообщении в другое действие / приложение для дальнейшей обработки.Если вам нужно передать сообщение в ваше собственное приложение, используйте метод sendBroadcast () для трансляции объекта Intent.В вашей деятельности вам просто нужно использовать метод registerReceiver () для прослушивания трансляции.

Надеюсь, это поможет!Вэй-Мэн Ли

0 голосов
/ 27 апреля 2011

Для Android ответ: Да .

android.provider.Telephony.SMS_RECEIVED Событие является заказной трансляцией, и вы можете настроить приоритет.Это означает, что ваше приложение получит событие раньше всех.И вы можете отменить Broadcast для остальных приемников Broadcast.

Более подробную информацию вы можете найти здесь: stackoverflow.com / can-we-we-delete-an-sms-in-android-before-it-достигает-The-Входящие /

0 голосов
/ 23 августа 2010

Для Android ответ - нет. Можно реализовать BroadcastReceiver, который вызывается всякий раз, когда устройство получает текстовое SMS-сообщение, но не может помешать другим приложениям (например, встроенному приложению обмена сообщениями) принимать их тоже.

...