Как отправлять и получать данные SMS-сообщения - PullRequest
10 голосов
/ 21 сентября 2010

Я нашел несколько учебных пособий о том, как отправлять / получать текстовые SMS-сообщения, но ни одного о том, как отправлять / получать данные SMS-сообщения.У меня очень маленький объем данных, который я хотел бы предоставить пользователям моего приложения.

Я могу отправить, но мой BroadcastReceiver никогда не вызывается.Кажется, это известная проблема (http://code.google.com/p/android/issues/detail?id=1576), но кто-нибудь еще выяснил, как это сделать?

Я пытался отправить / получить текстовое SMS, и это работает нормально, дело в том, что мне нужноуказать порт, чтобы только мое приложение могло прослушивать SMS.


Кажется, этот вопрос уже задавался здесь раньше, и на него никогда не отвечали: как получать текстовые смс на определенный порт ..

1 Ответ

25 голосов
/ 24 марта 2012

На момент моего ответа я знаю, что это 1 год, но я подумал, что это еще может кому-то помочь.
Принимающий:

Bundle bundle = intent.getExtras(); 

            String recMsgString = "";            
            String fromAddress = "";
            SmsMessage recMsg = null;
            byte[] data = null;
            if (bundle != null)
            {
                //---retrieve the SMS message received---
               Object[] pdus = (Object[]) bundle.get("pdus");
                for (int i=0; i<pdus.length; i++){
                    recMsg = SmsMessage.createFromPdu((byte[])pdus[i]);

                    try {
                        data = recMsg.getUserData();
                    } catch (Exception e){

                    }
                    if (data!=null){
                        for(int index=0; index<data.length; ++index)
                        {
                               recMsgString += Character.toString((char)data[index]);
                        } 
                    }

                    fromAddress = recMsg.getOriginatingAddress();
                }

Настройка приемника в манифесте:

<receiver android:name=".SMSReceiver"> 
        <intent-filter>
        <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
            <data android:scheme="sms" /> 
            <data android:port="8901" /> 
        </intent-filter> 
</receiver> 

Отправка:

String messageText = "message!"; 
short SMS_PORT = 8901; //you can use a different port if you'd like. I believe it just has to be an int value.
SmsManager smsManager = SmsManager.getDefault(); 
smsManager.sendDataMessage("8675309", null, SMS_PORT, messageText.getBytes(), null, null); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...