Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Как перехватить СМС состоящее из 2 или 3 СМС из приложения для андроид

Мой ресивер, он отлично работает когда приходят короткие смс, но при больших, перехватывает кусками. @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "onReceive()"); Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null; SmsMessage[] phonenum = null;//
if (bundle != null) { // ---retrieve the SMS message received--- 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]); body += msgs[i].getMessageBody().toString(); }
// ---retrieve the SMS senders number --- phonenum = new SmsMessage[pdus.length]; for (int i = 0; i < phonenum.length; i++) { phonenum[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); PhoneNUMBER += phonenum[i].getOriginatingAddress(); } Получается так, что если приходит большое сообщение, состоящее из 2 или 3 смс, то он его полностью не берет, а помещает в переменную body, только первую часть, а остальные вообще не обрабатывает. Получается пользователь видит первое СМС, цельной картины не видит, а остальные смс приходят обычным путем, через уведомление. Так вот хотел узнать как перехватывать такие сообщения?


Ответ

Держи кусочек код для перехвата мультипартных смсок. Возвращает Map private Map retrieveMessages(Intent intent) { Map msg = null; SmsMessage[] msgs = null; Bundle bundle = intent.getExtras(); if (bundle != null && bundle.containsKey("pdus")) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus != null) { int nbrOfpdus = pdus.length; msg = new HashMap(nbrOfpdus); msgs = new SmsMessage[nbrOfpdus]; // There can be multiple SMS from multiple senders, there can be a maximum of nbrOfpdus different senders // However, send long SMS of same sender in one message for (int i = 0; i < nbrOfpdus; i++) { msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); String originatinAddress = msgs[i].getOriginatingAddress(); // Check if index with number exists if (!msg.containsKey(originatinAddress)) { // Index with number doesn't exist // Save string into associative array with sender number as index msg.put(msgs[i].getOriginatingAddress(), msgs[i].getMessageBody()); } else { // Number has been there, add content but consider that // msg.get(originatinAddress) already contains sms:sndrNbr:previousparts of SMS, // so just add the part of the current PDU String previousparts = msg.get(originatinAddress); String msgString = previousparts + msgs[i].getMessageBody(); msg.put(originatinAddress, msgString); } } } } return msg; } Update Вызов: Map msgs = retrieveMessages(intent); for (String address : msgs.keySet()) String msg = msgs.get(address); //сообщение от адресата

Комментариев нет:

Отправить комментарий