android在收件箱中写入短信,android – 如何从收件箱中删除短信?

博客内容讲述了如何在Android中编写一个自动响应短信的程序,并在发送回复后从数据库中删除已处理的短信。通过定时任务每分钟检查收件箱,对于特定内容的短信,程序会发送预定义的回复。在接收到'abc'的短信时,回复'replyabc',收到'def'则回复'replydef'。在发送回复后,使用ContentResolver删除对应的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我编写了一个自动短信响应器:

.

.

.

function IsSMSAnswered(smsid: string): Boolean;

begin

// Code to test if SMS is answered

end;

procedure SendReplySMS(reply_smssender, reply_smsbody: string);

begin

// Code to send reply to smssender

end;

procedure FetchSMS; //fetch sms used by timer every 1 minute

var

cursor: JCursor;

uri: Jnet_Uri;

id_smsid: integer;

id_smssender: integer;

id_smsbody: integer;

id_smsid: string;

smssender: string;

smsbody: string;

smsreply: string;

begin

uri:= StrToJURI('content://sms/inbox');

cursor:= SharedActivity.getContentResolver.query(uri, nil, nil, nil, nil);

id_smsid:= cursor.getColumnIndex(StringToJstring('_id'));

id_smssender:= cursor.getColumnIndex(StringToJstring('address'));

id_smsbody:=cursor.getColumnIndex(StringToJstring('body'));

cursor.moveToLast;

for i:= cursor.getCount downto 1 do

begin

smsid:= :=JStringToString(cursor.getString(id_smsid));

if not IsSMSAnswered(smsid) then

begin

smssender:=JStringToString(cursor.getString(id_smssender));

smsbody:=JStringToString(cursor.getString(id_smssender));

if smsbody = 'abc' then

SendReplySMS(smssender, 'reply abc')

else if smsbody = 'def' then

SendReplySMS(smssender, 'reply def');

end

else

Break;

end;

end;

.

.

.

在这种情况下,仍然在电话数据库中收到所有收到的短信.

处理后如何从手机数据库中删除收到的短信?

.

.

.

if not IsSMSAnswered(smsid) then

begin

smssender:=JStringToString(cursor.getString(id_smssender));

smsbody:=JStringToString(cursor.getString(id_smssender));

if smsbody = 'abc' then

SendReplySMS(smssender, 'reply abc')

else if smsbody = 'def' then

SendReplySMS(smssender, 'reply def');

???? Now do I delete this received message ????

end

.

.

.

解决方法:

我有一个解决方案(在pskink的帮助下):

.

.

.

procedure FetchSMS; //fetch sms used by timer every 1 minute

var

cursor: JCursor;

uri: Jnet_Uri;

uri_del: Jnet_Uri;

id_smsid: integer;

id_smssender: integer;

id_smsbody: integer;

smsid: string;

smssender: string;

smsbody: string;

smsreply: string;

begin

uri:= StrToJURI('content://sms/inbox');

cursor:= SharedActivity.getContentResolver.query(uri, nil, nil, nil, nil);

id_smsid:= cursor.getColumnIndex(StringToJstring('_id'));

id_smssender:= cursor.getColumnIndex(StringToJstring('address'));

id_smsbody:=cursor.getColumnIndex(StringToJstring('body'));

cursor.moveToLast;

for i:= cursor.getCount downto 1 do

begin

smsid:= :=JStringToString(cursor.getString(id_smsid));

if not IsSMSAnswered(smsid) then

begin

smssender:=JStringToString(cursor.getString(id_smssender));

smsbody:=JStringToString(cursor.getString(id_smssender));

if smsbody = 'abc' then

SendReplySMS(smssender, 'reply abc')

else if smsbody = 'def' then

SendReplySMS(smssender, 'reply def');

// ???? Now I need to delete this received message ????

// There is the answer

uri_del:= StrToJURI('content://sms');

SharedActivity.getContentResolver.delete(uri_del, StringToJString('_ID=' + smsid), nil);

// There is the answer

end

else

Break;

end;

end;

.

.

.

标签:android,sms,delphi,firemonkey,delphi-xe5

来源: https://codeday.me/bug/20190624/1279434.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值