Я разрабатываю приложение для Android, которое должно получать SMS с заголовком пользовательских данных (UDH). Сообщения с UDH невидимы для стандартного Android SMS мессенджера. Я использую UDH "06050415810000" для тестирования ("06" - длина заголовка, "05" - тип заголовка, "04" - длина остальной части заголовка, "1581" - порт назначения, "0000" - порт src). Устройство с ОС Samsung получило сообщение с таким заголовком, и сообщение было показано в папке «Входящие» (но открыть сообщение было невозможно). Устройство с ОС Android не показывает его (это нормально), но мое приложение не может ловить невидимые SMS.
У меня есть следующий код для пересылки SMS:
public class SmsReceiver extends BroadcastReceiver {
public Class<?> delegate = null;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
AppManager.setSmsMessage(messages[0]);
if (delegate != null) {
Intent di = new Intent(context, delegate);
di.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
di.putExtra("SMS", messages[0].getPdu());
context.startActivity(di);
}
}
}
А это мой файл манифеста:
<receiver
android:name=".services.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.DATA_SMS_RECEIVED"/>
</intent-filter>
</receiver>
Приложение получает только сообщения без UDH.