Arsl01 1 Posted January 9 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 memo1.Lines.Add('SMS received.'); // Intent kontrolü if not csIntent.getAction.equals(StringToJString('android.provider.Telephony.SMS_RECEIVED')) then begin memo1.Lines.Add('This intent is not SMS_RECEIVED.'); Exit; end; // Bundle al Bundle := csIntent.getExtras; if Bundle = nil then begin memo1.Lines.Add('Bundle is empty.'); Exit; end; // pdus anahtarını kontrol et if not Bundle.containsKey(StringToJString('pdus')) then begin memo1.Lines.Add('pdus key not found.'); Exit; end; // pdus değerini al PDUs := Bundle.get(StringToJString('pdus')) as TJavaObjectArray<JObject>; if PDUs = nil then begin memo1.Lines.Add('Failed to convert PDUs.'); Exit; end; memo1.Lines.Add('PDUs successfully retrieved.'); // PDUs içindeki her bir PDU'yu işle for I := 0 to PDUs.Length - 1 do begin // Her bir PDU öğesini byte array'e dönüştür PDU := TJavaArray<Byte>.Wrap((PDUs.Items[I] as ILocalObject).GetObjectID); // PDU'yu SmsMessage'e dönüştür Sms := TJSmsMessage.JavaClass.createFromPdu(PDU); // Gönderen ve mesaj içeriğini al Sender := JStringToString(Sms.getDisplayOriginatingAddress); MessageBody := JStringToString(Sms.getMessageBody); // Gönderen ve mesajı logla memo1.Lines.Add('Sender: ' + Sender); memo1.Lines.Add('Message: ' + MessageBody); end; except on E: Exception do memo1.Lines.Add('General error: ' + E.Message); end; end; Hello everyone, I'm working on an SMS receiver application using Delphi FMX. I can successfully create the receiver and access the PDU key, but the PDU content is not coming through, and as a result, I am unable to read the SMS content. The app is set as the default SMS application. However, I've spent a lot of time on this issue and still can't find a solution. Has anyone encountered a similar issue or have any suggestions on how to resolve this? Thank you in advance for your help. Share this post Link to post
Arsl01 1 Posted January 9 PDUs := Bundle.get(StringToJString('pdus')) as TJavaObjectArray<JObject>; PDU value does not appear in this line Share this post Link to post
Dave Nottage 575 Posted January 14 (edited) On 1/9/2025 at 8:42 PM, Arsl01 said: PDUs := Bundle.get(StringToJString('pdus')) as TJavaObjectArray<JObject>; PDU value does not appear in this line Probably because that will not work. This should: uses System.TypInfo, Androidapi.JNIBridge; var Obj: JObject; ... Obj := Bundle.get(StringToJString('pdus'); PDUs := TJavaObjectArray<JObject>(WrapJNIArray((Obj as ILocalObject).GetObjectID, TypeInfo(TJavaObjectArray<JObject>))); If there were a complete example, I might be able to test it. Note that you should free PDUs after you are done with it (same for PDU in the other part of your code), as TJavaArray and TJavaObjectArray types are Delphi objects. Edited January 14 by Dave Nottage Share this post Link to post