Определение кодировки данных SMS-сообщений в Android
Я работаю над приложением, используя SMS apis для Android. Принимающая сторона - это встроенный модуль, который поддерживает только 7-битное кодированное SMS, а отправляемая мной строка состоит только из символов этого конкретного алфавита, что заставляет вас думать, что Android отправит его в 7-битном кодированном виде. Но это не тот случай.
Поэтому я ищу способ указать, какую кодировку использовать. Смотрите ниже, как мой код выглядит сегодня. Метод gsm7BitPackedToString превращает байтовый массив в 7-битную строку, то есть строка состоит только из 7-битных совместимых символов и копируется из внутреннего Android-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;
}
Я рассмотрел следующие решения:
- Использование какого-то внутреннего метода, но ни один из тех, о которых я читал, кажется, больше не существует.
- Отправка сообщения данных, но для этого требуется дополнительный заголовок пользовательских данных, который также не поддерживает принимающая сторона.
Любая помощь приветствуется:-)
2 ответа
Ну, решение было не так сложно, как может показаться. Класс GsmAlphabet, который я позаимствовал из проекта Android, имел некоторые ошибки кодирования. Я заменил его последней версией из репозитория git, и теперь все, кажется, работает так, как должно.
Извлеченный урок: всегда проверяйте, что должно работать.
Попробуйте использовать SmsMessage
учебный класс:
http://developer.android.com/reference/android/telephony/SmsMessage.html
Создайте SmsMessage
объект с createFromPdu()
метод и использовать его для отправки в SmsManager
,
Я не пробовал это. Удачи.