Android: как отправлять и получать данные с помощью SMS-сообщений - PullRequest
3 голосов
/ 24 октября 2010

Я хочу отправить некоторые данные (НЕ МУЛЬТИМЕДИА) через SMS-сообщение в Android.Можно ли это сделать?Я просто хочу отправить очень маленький объем данных с одного телефона на другой в виде XML или чего-то подобного.

Ответы [ 2 ]

3 голосов
/ 04 июня 2011

Правильный способ сделать это - использовать sendDataMessage из класса SmsManager.Вот маленький код (SMSSender):

SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendDataMessage(phoneNumber, null,
            (short) myApplicationPort, messageString.getBytes(), sentIntent, deliveryIntent);

Вот еще один маленький код (SMSReceiver):

    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Object[] pdusObj = (Object[]) bundle.get("pdus");
        SmsMessage[] messages = new SmsMessage[pdusObj.length];

        // getting SMS information from PDU
        for (int i = 0; i < pdusObj.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
        }

        for (SmsMessage currentMessage : messages) {
            if (!currentMessage.isStatusReportMessage()) {

                String messageBody = currentMessage.getDisplayMessageBody();

                    byte[] messageByteArray = currentMessage.getPdu();

                    // skipping PDU header, keeping only message body
                    int x = 1 + messageByteArray[0] + 19 + 7;

// I'm not sure about this last line, as I'm not converting the bytes back to string, so test it out
                    String realMessage = new String(messageByteArray, x, messageByteArray.length-x);

Вот что вы должны добавить в свой AndroidManifest.xml:

 <receiver android:name=".SMSReceiver">
   <intent-filter>
     <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
     <data android:scheme="sms" />
     <data android:host="localhost" />
     <data android:port="12345" /><!-- this number should be the same as the `myApplicationPort` from above!!! -->
   </intent-filter>
 </receiver> 
1 голос
/ 24 октября 2010

Насколько я понимаю ваш вопрос, я бы сказал, что вы можете отправлять любые текстовые данные любого типа, такие как XML, строки JSON или что-либо еще, через SMS. Например, вы можете идентифицировать ваши сообщения данных на получателе по определенному хешу, который может быть частью контента. Получатель должен прослушивать намерение SMS_RECEIVED.

<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>

Таким образом, вы можете получить данные и после этого удалить сообщение из хранилища сообщений, чтобы оно не отображалось в разговоре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...