因此,现有技术还有待于改进和发展。
技术实现要素:
本发明的技术方案如下:
a、预先在手机上设置运营商投诉号码以及标准投诉短信格式并保存;
b、当检测到陌生号码的来电或短信时,则判断所述陌生号码是否记录在黑名单中;
c、当判定所述陌生号码未记录在黑名单中时,则判断所述陌生号码的来电或短信是否为骚扰信息;
d、当判定所述来电或短信是为骚扰信息时,则按照标准投诉短信格式编辑所述陌生号码并将编辑后的陌生号码发送至运营商投诉号码。
通过调用blockchecker的isblocked的方法判断所述陌生号码是否记录在黑名单中。
d1、当判定所述陌生号码的来电为骚扰信息时,则挂断所述来电并将所述陌生号码记录在黑名单中,同时将所述陌生号码按照标准投诉短信格式编辑后发送至运营商投诉号码;
d2、当判定所述陌生号码的短信为骚扰信息时,则直接将所述短信移至删除栏中,并将所述陌生号码记录在黑名单中,同时将所述陌生号码按照标准投诉短信格式编辑后发送至运营商投诉号码。
d21、将所述陌生号码的短信内容与预先存储在手机上的敏感词汇进行比对;
d22、当所述陌生号码的短信内容存在所述敏感词汇时,则判定所述陌生号码的短信为骚扰信息。
e、运营商统计接收到的被不同号码投诉的同一陌生号码的次数,当同一陌生号码被不同号码投诉的次数大于预定值时,则对所述陌生号码进行停机操作。
附图说明
具体实施方式
s10、预先在手机上设置运营商投诉号码以及标准投诉短信格式并保存;
s20、当检测到陌生号码的来电或短信时,则判断所述陌生号码是否记录在黑名单中;
s30、当判定所述陌生号码未记录在黑名单中时,则判断所述陌生号码的来电或短信是否为骚扰信息;
s40、当判定所述来电或短信是为骚扰信息时,则按照标准投诉短信格式编辑所述陌生号码并将编辑后的陌生号码发送至运营商投诉号码。
为解决上述问题,本发明通过预先在手机上设置运营商投诉号码以及标准投诉短信格式并保存,当判定陌生号码的来电或短信为骚扰信息时,则将所述陌生号码记录在黑名单中,同时将所述陌生号码按照标准投诉短信格式编辑后直接发送至预先设置的运营商投诉号码。
具体地,以android系统手机为例,在所述步骤s10中,本发明通过提前在手机上设置运营商投诉号码以及标准投诉短信格式并保存至手机存储文件中。例如,当手机的运营商为中国移动时,则可设置运营商投诉号码为10086;当然,若所述手机为双卡双待手机,且双卡的运营商不同,则可同时设置两个投诉号码分别对应不同的运营商。较佳地,所述标准投诉短信格式可以为“号码+归属地+骚扰内容”,例如“号码:158****5472;归属地:深圳;赌博推荐”。
进一步,在本发明所述步骤s20中,当检测到陌生号码的来电或短信时,则判断所述陌生号码是否记录在黑名单中。具体来说,所述手机为android系统,当手机检测到来电或短信信息时,所述来电或短信信息会传递至teleservice中,在teleservice中会查询来电或短信的号码信息,比如号码归属地以及是否是已知联系人等。
com.android.internal.telephony.blockchecker
publicstaticbooleanisblocked(contextcontext,stringphonenumber){
booleanisblocked=false;
longstarttimenano=system.nanotime();
try{
if(blockednumbercontract.systemcontract.shouldsystemblocknumber(
context,phonenumber)){
rlog.d(tag,phonenumber+"isblocked.");
isblocked=true;
}
}catch(exceptione){
rlog.e(tag,"exceptioncheckingforblockednumber:"+e);
intdurationmillis=(int)((system.nanotime()-starttimenano)/1000000);
if(durationmillis>500||vdbg){
rlog.d(tag,"blockednumberlookuptook:"+durationmillis+"ms.");
returnisblocked;
blockednumbercontract.systemcontract是framework里的一个黑名单协议类。
publicstaticfinalstringauthority="com.android.blockednumber";
publicstaticfinalstringmethod_should_system_block_number=
"should_system_block_number";
publicstaticbooleanshouldsystemblocknumber(contextcontext,stringphonenumber){
finalbundleres=context.getcontentresolver().call(
authority_uri,method_should_system_block_number,phonenumber,null);
returnres!=null&&res.getboolean(res_number_is_blocked,false);
黑名单是blockednumberprovider数据库,调用call方法
com.android.providers.blockednumber.blockednumberprovider
@override
publicbundlecall(@nonnullstringmethod,@nullablestringarg,@nullablebundleextras){
finalbundleres=newbundle();
switch(method){
casesystemcontract.method_should_system_block_number:
enforcesystemreadpermissionandprimaryuser();
res.putboolean(
blockednumbercontract.res_number_is_blocked,shouldsystemblocknumber(arg));
break;
privatebooleanshouldsystemblocknumber(stringphonenumber){
if(getblocksuppressionstatus().issuppressed){
returnfalse;
if(isemergencynumber(phonenumber)){
returnisblocked(phonenumber);
最后调用isblocked方法查询blocked表中是否存在该number,查询得到结果后返回。
callfilteringresultresult;
if(isblocked){
result=newcallfilteringresult(
false,//shouldallowcall
true,//shouldreject
false,//shouldaddtocalllog
false//shouldshownotification
);
}else{
true,//shouldallowcall
false,//shouldreject
true,//shouldaddtocalllog
true//shouldshownotification
通过上述代码查询,可以快速、准确地判定出所述陌生号码是否记录在黑名单中。
更进一步,在所述步骤s40中,当判定所述来电或短信为骚扰信息时,则按照标准投诉短信格式编辑所述陌生号码并将编辑后的陌生号码发送至运营商投诉号码。具体来说,当判定所述陌生号码的来电为骚扰信息时,则挂断所述来电并将所述陌生号码记录在黑名单中,同时将所述陌生号码按照标准投诉短信格式编辑后发送至运营商投诉号码;当判定所述陌生号码的短信为骚扰信息时,则直接将所述短信移至删除栏中,并将所述陌生号码记录在黑名单中,同时将所述陌生号码按照标准投诉短信格式编辑后发送至运营商投诉号码。
进一步,所述陌生号码在android平台以短信方式发送至运营商的具体流程如下所示:
在交由smsmessagesender处理之前,workingmessage会回调ui一次,以让ui刷新收信人编辑框和信息文本输入框。smsmessagesender的主要任务就是,把信息进行按收信人拆分,也就是说,短信是要给每个收信人都发一封,虽然可能只编辑一个短信,但是当收信人不只一个时,就变成了多条短信,就要发出多条短信,要给每一个收信人都发一封短信。
因此,smsmessagesender的第一个任务就是分析收信人地址,得到收信人的个数,然后把信息按每个收信人都放入待发送的队列中。这样就得到了一个短信发送队列,短信的数目就是收信人的个数。
事实上,smsmessagesender的工作仅此而已,当把信息都放入发送队列后也就是写进数据库,然后信息的状态是正在发送中,它会发送intent唤起smsreceiverservice来处理队列,它的工作就完成了,sendmessage()也就此返回。
smsmessagesender的sendmessage()返回后,workingmessage会再次回调ui的接口,因为此时短信已被写入数据库,所以ui会刷新信息列表,显示刚刚的短信,这时的状态应该是正在发送中,因为是从待发送队列中拿到的。从这以后,发送流程的类不会再直接与ui进行通信,发送服务smsreceiverservice等会直接更新数据库中短信的状态,而ui会监听数据库的变化,一旦信息数据发生变化,ui就会刷新列表中的消息,更新状态,比如将发送中变成已发送,或是标明发送失败等,而这些状态都是发送服务在更新。smsreceiverservice并不只负责接收信息,它是短信(sms)处理的service,负责短信的发送和接收,在得到发送短信息指令(action_send_message)后会从队列中读出第一个短信,然后创建smssinglerecipientsender对象,传入收信人地址,消息内容,所述的threadid和短信的uri,并调用其sendmessage()发送这个短信。
smssinglerecipientsender会调用smsmanager的方法dividemessage()来把短信分成适合发送的几个部分,因为可能信息过长,不能一次发送完成,所以就需要分成几部分来分次发送;同时会把消息移动到outbox。然后会针对分割的每一部分都会创建二个pendingintent,这二个pendingintent都是给底层用的,一个用于当短信被发送出去时广播出来,另一个是在短信已被收信人接收到时广播出来。所以二个广播的作用是,一个可用于标识短信已发送,另一个则可以作为送达的通知。最后调用smsmanager.sendmultiparttextmessage交由底层来发送短信。
smsreceiverservice并不是自己去监听send_message_action和message_sent_action的,而是由smsreceiver来监听这二个广播事件,然后通过startservice再把这二个事件传送给smsreceiverservice进行处理。信息已发送广播和信息已送达广播分别由smsreceiverservice监听和messagestatusreceiver。它们收到广播后,会从intent中取得详细的发送和送达状态,然后更新数据库中信息的状态(status),ui当发现数据库变化后,就会更新ui。至此,一个短信发送完成。
更进一步地,在所述步骤s40之后还包括:
具体地,所述处理器加载并执行的指令为:
预先在手机上设置运营商投诉号码以及标准投诉短信格式并保存;
当检测到陌生号码的来电或短信时,则判断所述陌生号码是否记录在黑名单中;
当判定所述陌生号码未记录在黑名单中时,则判断所述陌生号码的来电或短信是否为骚扰信息;
当判定所述来电或短信是为骚扰信息时,则按照标准投诉短信格式编辑所述陌生号码并将编辑后的陌生号码发送至运营商投诉号码。
具体来说,所述处理器10在一些实施例中可以是一中央处理器,微处理器或其他数据处理芯片,用于运行所述存储设备20中存储的程序代码或处理数据。
所述存储设备20在一些实施例中可以是所述装置的内部存储单元,例如该装置的硬盘或内存。所述存储设备20在另一些实施例中也可以是所述装置的外部存储器,例如所述装置上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。
进一步地,所述存储设备20还可以既包括所述装置的内部存储单元也包括外部存储装置。所述存储设备20用于存储安装于所述装置的应用软件及各类数据。所述存储设备20还可以用于暂时地存储已经输出或者将要输出的数据。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,例如,所有这些改进和变换都应属于本发明所附权利要求的保护范围。