Android sendTextMessage отправляет два одинаковых сообщения на исключение - PullRequest
3 голосов
/ 14 марта 2012

Я работаю над приложением, которое отправляет SMS-сообщения. У меня проблема в том, что метод sendTextMessage отправляет два сообщения с одинаковым содержимым. Как мне это исправить?

Этот класс запускает процесс

public class C2DMMessageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //Some stuff
        Log.i("C2DMMessageReceiver", "Got C2DM message");
        SmsSend message = new SmsSend(context, phonenumber, line);
        message.send()
    }
}

Класс для отправки текстовых сообщений

public class SmsSend {
    SmsSend(Context tcontext, String phoneNumber, String smstext){
        context = tcontext;
        phone_number = phoneNumber;
        message = smstext; 
    }

    protected void send(){

        if(foo){
            Log.i("SmsSend", "Sending message");
            SmsManager sms = SmsManager.getDefault();
            String sent = "android.telephony.SmsManager.STATUS_ON_ICC_SENT";
            PendingIntent piSent = PendingIntent.getBroadcast(context, 0, new Intent(sent), 0);
            sms.sendTextMessage(phone_number, null, message, piSent, null);
        }

    }
}

класс, чтобы узнать, что радует

public class SmsSentBroadcastReciever extends BroadcastReceiver{
    private static final String TAG = "SmsSentBroadcastReciever";

    @Override
    public void onReceive(Context context, Intent intent) {
        switch (getResultCode()){
            case Activity.RESULT_OK:
                Log.i(TAG,"SMS sent");
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                Log.e(TAG,"Generic failure");
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                Log.e(TAG,"No service");
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                Log.e(TAG,"PDU NULL");
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                Log.e(TAG,"Radio off");
                break;
        }

    }

}

Выход из LogCat

Получил сообщение C2DM

Отправка сообщения

СМС отправлено

СМС отправлено

Таким образом, sendTextMessage запускается только один раз, но все равно выдает два сообщения. Что делать?

Устройство, которое я отлаживаю, - это Samsung Galaxy S2 с Android 4.0. Я прочитал некоторые старые темы, что sendTextMessage не работает на некоторых (HTC) устройствах, поэтому я попытался с sendMultipartTextMessage, но это дает тот же результат.

Ответы [ 4 ]

3 голосов
/ 17 апреля 2012

Следующий код работает нормально, S2 с ICS:

void sendMessageGTI9100ICS(String number, String msg) throws Exception {
    SmsManager m = SmsManager.getDefault();

    Class aclass[] = new Class[9];

    aclass[0] = String.class;
    aclass[1] = String.class;
    aclass[2] = ArrayList.class;
    aclass[3] = ArrayList.class;
    aclass[4] = ArrayList.class;
    aclass[5] = Boolean.TYPE;
    aclass[6] = Integer.TYPE;
    aclass[7] = Integer.TYPE;
    aclass[8] = Integer.TYPE;

    Method method = m.getClass().getMethod("sendMultipartTextMessage", aclass);

    Object aobj[] = new Object[9];
    aobj[0] = number;
    aobj[1] = null;
    aobj[2] = m.divideMessage(msg);
    aobj[3] = null;
    aobj[4] = null;
    aobj[5] = Boolean.valueOf(false);
    aobj[6] = Integer.valueOf(0);
    aobj[7] = Integer.valueOf(0);
    aobj[8] = Integer.valueOf(0);

    method.invoke(m, aobj);
}
2 голосов
/ 29 апреля 2012

Я создал небольшой проект библиотеки Android, который решает эту проблему, используя ответ от Stipa, а также код, чтобы заставить его работать в HTC Tattoo и убедиться, что на основе устройства выбрана правильная реализация.

https://github.com/nadam/compatibility-sms-manager

1 голос
/ 29 марта 2012

Существует проблема с прошивкой (LPQ) специально для Galaxy S2, где SMS отправляется дважды во всех сторонних приложениях (включая Handcent, GO SMS и т. Д.), Кроме приложения для обмена сообщениями.Я думаю, что последняя версия прошивки LP7 устраняет проблему отправки дубликата SMS.Можете ли вы проверить версию прошивки на вашем телефоне?

Handcent & GO SMS нашли свои обходные пути и обновили свои приложения на рынок.

0 голосов
/ 14 марта 2012

Этот код будет распечатывать «SMS отправлено», когда активность вернется, а не когда SMS действительно отправлено. public void onReceive(Context context, Intent intent) { switch (getResultCode()){ case Activity.RESULT_OK: Log.i(TAG,"SMS sent"); break; Так что, вероятно, происходит то, что другое выполняемое вами действие завершается, а затем возвращает RESULT_OK. Я не могу сказать, хотя, так как я вижу, как вы настроили приемники вещания для приема.

Проблема была в прошивке, о которой сообщалось в ответах выше.

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