Определение кодировки данных SMS-сообщений в Android

Я работаю над приложением, использующим API SMS для Android. Принимающая сторона представляет собой встроенный модуль, который поддерживает только 7-битные закодированные SMS, а отправляемая мной строка состоит только из символов этого конкретного алфавита, из-за чего вы думаете, что Android отправит ее в 7-битной кодировке. Но это не тот случай.

Поэтому я ищу способ указать, какую кодировку использовать. Посмотрите ниже, как выглядит мой код сегодня. Метод gsm7BitPackedToString превращает массив байтов в 7-битную строку, т.е. строка состоит только из 7-битных совместимых символов и копируется из внутреннего API андроида.

private static boolean sendMessage(String tel,byte[] message,int septets) {
    SmsManager sms = SmsManager.getDefault();
    if (septets != -1) {
        String a = GsmAlphabet.gsm7BitPackedToString(message,0,septets);
        sms.sendTextMessage(tel, null, a, null, null);
        return true;
    }
    return false;
}

Я рассмотрел следующие решения:

  • Использование какого-то внутреннего метода, но ни одного из я читал о, похоже, больше не существует.
  • Отправка сообщения данных, но для этого требуется дополнительный заголовок пользовательских данных, который принимающая сторона также не поддерживает.

Любая помощь приветствуется :-)


person m__    schedule 24.08.2010    source источник
comment
Привет, не могли бы вы добавить классы или ссылку, где вы нашли GsmAlphabet? Я хочу отправить SMS через USSD, и у меня проблема с кодировкой строки, которую я отправляю в коде ussd. Я могу поделиться своим кодом для отправки сообщения ussd, если хотите. Спасибо.   -  person    schedule 14.05.2011
comment
GsmAlphabet взят из проект с открытым исходным кодом для Android   -  person m__    schedule 16.05.2011


Ответы (2)


Что ж, решение оказалось не таким трудным, как может показаться. Класс GsmAlphabet, который я позаимствовал из проекта Android, имел некоторые ошибки кодирования. Я заменил его на последний из репозитория git, и теперь все работает так, как должно.

Усвоенный урок: всегда дважды и трижды проверяйте то, что должно работать.

person m__    schedule 25.08.2010

Попробуйте использовать класс SmsMessage:

http://developer.android.com/reference/android/telephony/SmsMessage.html

Создайте объект SmsMessage методом createFromPdu() и используйте его для отправки в SmsManager.

Я не пробовал. Удачи.

person plugmind    schedule 24.08.2010
comment
Я тоже смотрел на это решение. Проблема, которую я обнаружил, заключается в том, что, похоже, нет способа отправить экземпляр класса SmsMessage в виде SMS. Может я просто чего-то не понимаю...? - person m__; 24.08.2010