На этот раз я пытаюсь прочитать смс, используя среду 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)
Я спрашиваю о предложении о том, что не так с кодом или что-то еще