Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема чтения SMS-сообщений в приложении на Delphi: Как извлечь содержание PDU

Delphi , Программа и Интерфейс , Приложение своё

 

Вопрос, поднятый пользователем Arsl01, касается разработки приложения для приема SMS на платформе Delphi FMX. Приложение настроено как стандартное для приема SMS, но при попытке доступа к содержимому PDU возникает проблема: данные не отображаются, и, как следствие, чтение содержимого SMS невозможно.

Контекст проблемы

Arsl01 предоставил фрагмент кода, который успешно обращается к ключу 'pdus' в bundle, но не может получить доступ к содержимому PDU. В ответе Dave Nottage предложено исправить код, используя другую логику обертки массива JNI.

Анализ проблемы

Проблема может заключаться в неправильной обертке массива JNI для использования в Delphi. В коде Arsl01 используется метод Wrap, который может некорректно обрабатывать данные, полученные из bundle.

Предложенное решение

Dave Nottage предложил использовать WrapJNIArray для обертки массива JNI, что должно позволить корректно работать с PDU. Пример кода может выглядеть следующим образом:

uses
  System.TypInfo,
  Androidapi.JNIBridge;

var
  Obj: JObject;
  PDUs: TJavaObjectArray<JObject>;

...

Obj := Bundle.get(StringToJString('pdus'));
PDUs := TJavaObjectArray<JObject>(WrapJNIArray((Obj as ILocalObject).GetObjectID, TypeInfo(TJavaObjectArray<JObject>)));

Не забудьте освободить ресурсы, используя Free, после завершения работы с PDUs и PDU, так как TJavaArray и TJavaObjectArray являются объектами Delphi, которые требуют корректного освобождения памяти.

Альтернативное решение

В качестве альтернативы можно использовать другие методы для работы с PDU, например, через использование специализированных библиотек для парсинга SMS-сообщений, которые могут быть более устойчивы к различным ошибкам и несоответствиям.

Пример кода для чтения SMS

procedure TForm1.AndroidBroadcastReceiver2Receive(csContext: JContext; csIntent: JIntent);
var
  Bundle: JBundle;
  PDUs: TJavaObjectArray<JObject>;
  Sms: JSmsMessage;
  Sender, MessageBody: string;
  I: Integer;
  PDU: TJavaArray<Byte>;
begin
  try
    // ... (предыдущий код для проверки intent и получения bundle)
    // Используем предложенное решение Dave Nottage для работы с PDUs
    PDUs := TJavaObjectArray<JObject>(WrapJNIArray((Bundle.get(StringToJString('pdus')) as ILocalObject).GetObjectID, TypeInfo(TJavaObjectArray<JObject>)));

    if PDUs <> nil then
    begin
      // ... (цикл для обработки каждого PDU)
      for I := 0 to PDUs.Length - 1 do
      begin
        // ... (код для обертки PDU в byte array и создание SmsMessage)
        Sms := TJSmsMessage.JavaClass.createFromPdu(PDU);

        // Освобождаем ресурсы после использования
        PDU.Free;
      end;
      PDUs.Free;
    end
    else
    begin
      // ... (обработка ошибки, если PDUs не получены)
    end;

  except
    on E: Exception do
      memo1.Lines.Add('General error: ' + E.Message);
  end;
end;

Заключение

Для решения проблемы с чтением SMS-сообщений в приложении на Delphi, следует обратить внимание на корректность обертки JNI массивов и освобождение ресурсов после их использования. Применение предложенных решений должно помочь Arsl01 успешно извлечь содержимое PDU и читать SMS-сообщения в его приложении.

Создано по материалам из источника по ссылке.

Контекст описывает проблему чтения SMS-сообщений в Delphi FMX приложении из-за неправильной обработки PDU данных с помощью JNI массивов и предлагает решения для её устранения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-22 19:32:00/0.0032589435577393/0