Как читать SMS с C++ Builder в Android

На этот раз я пытаюсь прочитать смс, используя среду C++ Builder, и то, что я нашел в Интернете, - это один пример, написанный на Delphi. Мне не нужна вся информация из этого примера, поэтому я взламываю этот код до одного параметра. Итак, пример выглядит так и взят из этого поста. Как кодировать чтение смс-сообщений с android kitkat Delphi XE8

function TForm1.Process_SMS: string;
var
  cursor: JCursor;
  uri: Jnet_Uri;
  address, person, msgdatesent, protocol, msgread, msgstatus, msgtype,
  msgreplypathpresent, subject, body,
  smsid, servicecenter, locked: string;
  msgunixtimestampms: int64;
  id_smsid, addressidx, personidx, msgdateidx, msgdatesentidx, protocolidx,
  msgreadidx, msgstatusidx, msgtypeidx, msgreplypathpresentidx, subjectidx,
  bodyidx, servicecenteridx, lockedidx: integer;
begin
  uri := StrToJURI('content://sms/inbox');
  cursor := SharedActivity.getContentResolver.query(uri, nil, nil, nil, nil);
  id_smsid := cursor.getColumnIndex(StringToJstring('_id'));
  addressidx := cursor.getColumnIndex(StringToJstring('address'));
  personidx := cursor.getColumnIndex(StringToJstring('person'));
  msgdateidx := cursor.getColumnIndex(StringToJstring('date'));
  msgdatesentidx := cursor.getColumnIndex(StringToJstring('date_sent'));
  protocolidx := cursor.getColumnIndex(StringToJstring('protocol'));
  msgreadidx := cursor.getColumnIndex(StringToJstring('read'));
  msgstatusidx := cursor.getColumnIndex(StringToJstring('status'));
  msgtypeidx := cursor.getColumnIndex(StringToJstring('type'));
  msgreplypathpresentidx := cursor.getColumnIndex(StringToJstring('reply_path_present'));
  subjectidx := cursor.getColumnIndex(StringToJstring('subject'));
  bodyidx := cursor.getColumnIndex(StringToJstring('body'));
  servicecenteridx := cursor.getColumnIndex(StringToJstring('service_center'));
  lockedidx := cursor.getColumnIndex(StringToJstring('locked'));

  while (cursor.moveToNext) do
  begin
    smsid := JStringToString(cursor.getString(id_smsid));
    address := JStringToString(cursor.getString(addressidx));
    person := JStringToString(cursor.getString(personidx));
    msgunixtimestampms := cursor.getLong(msgdateidx);
    msgdatesent := JStringToString(cursor.getString(msgdatesentidx));
    protocol := JStringToString(cursor.getString(protocolidx));
    msgread := JStringToString(cursor.getString(msgreadidx));
    msgstatus := JStringToString(cursor.getString(msgstatusidx));
    msgtype := JStringToString(cursor.getString(msgtypeidx));
    msgreplypathpresent := JStringToString(cursor.getString(msgreplypathpresentidx));
    subject := JStringToString(cursor.getString(subjectidx));
    body := JStringToString(cursor.getString(bodyidx));
    servicecenter := JStringToString(cursor.getString(servicecenteridx));
    locked := JStringToString(cursor.getString(lockedidx));
    Listbox1.Items.Add(subject);
    // I plan on deleting messages here
    //SharedActivity.getContentResolver.delete(uri, StringToJString('_ID=' + smsid), nil);
    Result := IntToStr(trunc(msgunixtimestampms/1000)) + ' ' + address + ' ' + body;
  end;
end;

В моем примере я хочу прочитать только тело смс-сообщения и выглядит так:

_di_JCursor cursor;
  _di_Jnet_Uri uri;

   uri = StrToJURI( "content://sms/inbox" );
   cursor = SharedActivity()->getContentResolver()->query( uri, nullptr, nullptr, nullptr, nullptr );

   int bodyidx = cursor->getColumnIndex( StringToJString("body") );
   String body;

   while ( cursor->moveToNext )
   {
    body = JStringToString( cursor->getString(bodyidx) );
   }

   Memo1->Lines->Add(body);

У меня есть несколько старых и одно новое смс, и после нажатия кнопки для чтения смс я получил ошибки, которые я не понимаю:

Исключение первого шанса на $ 61C3F582. Класс исключения Ошибка шины (10). Процесс Project1.apk (4600) Исключение первого шанса по цене 61D2B76E. Класс исключения Ошибка сегментации (11). Процесс Project1.apk (4731)

Я спрашиваю о предложении о том, что не так с кодом или что-то еще


person Jacek    schedule 08.07.2017    source источник