Определение кодировки данных SMS-сообщений в Android - PullRequest
1 голос
/ 24 августа 2010

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

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

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;
}

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

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

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

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

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

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

1 голос
/ 24 августа 2010

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

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

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

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

...