Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как получить результат отправки СМС, корректно получить Activity.RESULT через broadcast


ENERGY

Вопрос

Привет.

Для отправки смс используется SMSManager  и его функция.

smsManager.sendTextMessage(smsTo, nil, StringToJString('Test SMS'), nil, nil);

Описание ее на сайте developer.android.com . Для того чтобы узнать статус отправлена смс или нет, нужно указать предпоследний параметр 

sentIntent PendingIntent: if not NULL this PendingIntent is broadcast when the message is successfully sent, or failed. The result code will be Activity.RESULT_OK for success, or one of these errors:
RESULT_ERROR_GENERIC_FAILURE
RESULT_ERROR_RADIO_OFF
RESULT_ERROR_NULL_PDU.

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

Вот что пишет этот человек:  You have to createIntent objects first, THEN create PendingIntent objects to wrap those Intent objects, THEN pass the PendingIntent objects to sendTextMessage() and use a broadcastReceiver to receive the Intent objects.

 

Итак я создаю интент, и оборачиваю его в PendingIntent по аналогии со статьей Андрея Ефимова: 

 // Создаём Интент

Intent := TJIntent.Create;
Intent.setClassName(TAndroidHelper.Context, StringToJString('com.TestReceiver.AlarmReceiver'));

// Оборачиваем Интент в PendingIntent

PendingIntent := TJPendingIntent.JavaClass.getBroadcast(TAndroidHelper.Context, 1, Intent, 0);

И вставляю это PendingIntent в код sendTextMessage

 

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

package com.TestReceiver;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
 
public class AlarmReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
            Intent TestLauncher = new Intent();
            TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity");
            TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(TestLauncher);
    }
}

 

Вопрос в следующем: 

Как мне эту цифру с ошибкой  Activity.RESULT_OK (или RESULT_ERROR_GENERIC_FAILURE или любой другой) вытащить оттуда и передать в программу?

Upd1:

Это результат вызова из Java кода метода getResultCode().

Можно ли getResultCode вызвать из Delphi, а не из Java кода?

 

 

 

Изменено пользователем ENRGY
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Нашел код на Java, вроде более менее понятно.  http://stackoverflow.com/questions/24673595/how-to-get-sms-sent-confirmation-for-each-contact-person-in-android буду разбираться..

Видимо забирать значения нужно вызывая 

getResultCode

в java коде, и придется забрасывать значения через PutExtra в моё Activity и там их обрабатывать (по таймеру проверять пришли новые значения или нет в случае если прога уже запущена?).

 

Может у кого то есть другое решение? К примеру проверять этот Activity Result из Delphi ?

К примеру вот эта статья http://blong.com/Articles/DelphiXE6AndroidActivityResult/ActivityResult.htm  (глава Communication from the launched activity) случайно не про извлечение Activity Result из Delphi ?

Изменено пользователем ENRGY
Ссылка на комментарий
  • 0

А можно как то вызвать getResultCode из Delphi?

Чтобы не отправлять результаты из Java кода в Delphi при помощи PutExtra

 

Код Java: 

private BroadcastReceiver receiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            if (SENT.equals(intent.getAction()))
            {
                String name = intent.getStringExtra("name");
                String number = intent.getStringExtra("number");

                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        toastShort("SMS sent to " + name + " & " + number);
                        break;

                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        toastShort("Generic failure");
                        break;

                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        toastShort("No service");
                        break;

                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        toastShort("Null PDU");
                        break;

                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        toastShort("Radio off");
                        break;
                }
            }
            else if (DELIVERED.equals(intent.getAction()))
            {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        toastShort("SMS delivered");
                        break;

                    case Activity.RESULT_CANCELED:
                        toastShort("SMS not delivered");
                        break;
                }
            }
        }
    };
Изменено пользователем ENRGY
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...