Android中实现基本的短信拦截功能的代码示例
要点
1.在Manifest.xml里加"接收"SMS的权限
<uses-permissionAndroid:name="android.permission.RECEIVE_SMS"></uses-permission>
2.在Manifest.xml里注册一个receive
<!--注册Receiver,并且设置优先级--> <receiverandroid:name=".AutoSMS"android:exported="false"> <intent-filterandroid:priority="1000"> <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
3.定义一个短信接收类,并且重写onReceive
//继承BroadcastReceiver
publicclassAutoSMSextendsBroadcastReceiver
{
privateStringTAG="AutSMS";
//广播消息类型
publicstaticfinalStringSMS_RECEIVED_ACTION="android.provider.Telephony.SMS_RECEIVED";
//覆盖onReceive方法
@Override
publicvoidonReceive(Contextcontext,Intentintent)
{
.....
实例
下面是完整的代码:
Manifest.xml:
<manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.xxh.autosms" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/> <uses-permissionandroid:name="android.permission.RECEIVE_SMS"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/title_activity_main"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!--注册Receiver,并且设置优先级--> <receiverandroid:name=".AutoSMS"android:exported="false"> <intent-filterandroid:priority="1000"> <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> </manifest>
AutoSMS.java:
packagecom.xxh.autosms;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.telephony.SmsMessage;
importandroid.util.Log;
importandroid.widget.Toast;
//继承BroadcastReceiver
publicclassAutoSMSextendsBroadcastReceiver
{
privateStringTAG="AutSMS";
//广播消息类型
publicstaticfinalStringSMS_RECEIVED_ACTION="android.provider.Telephony.SMS_RECEIVED";
//覆盖onReceive方法
@Override
publicvoidonReceive(Contextcontext,Intentintent)
{
//TODOAuto-generatedmethodstub
Log.i(TAG,"引发接收事件");
//StringBuilderbody=newStringBuilder("");//短信内容
//StringBuildersender=newStringBuilder("");//发件人
//先判断广播消息
Stringaction=intent.getAction();
if(SMS_RECEIVED_ACTION.equals(action))
{
//获取intent参数
Bundlebundle=intent.getExtras();
//判断bundle内容
if(bundle!=null)
{
//取pdus内容,转换为Object[]
Object[]pdus=(Object[])bundle.get("pdus");
//解析短信
SmsMessage[]messages=newSmsMessage[pdus.length];
for(inti=0;i<messages.length;i++)
{
byte[]pdu=(byte[])pdus[i];
messages[i]=SmsMessage.createFromPdu(pdu);
}
//解析完内容后分析具体参数
for(SmsMessagemsg:messages)
{
//获取短信内容
Stringcontent=msg.getMessageBody();
Stringsender=msg.getOriginatingAddress();
Datedate=newDate(msg.getTimestampMillis());
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
StringsendTime=sdf.format(date);
//TODO:根据条件判断,然后进一般处理
if("10060".equals(sender))
{
//屏蔽手机号为10060的短信,这里还可以时行一些处理,如把这个信息发送到第三人的手机等等。
//TODO:测试
Toast.makeText(context,"收到10060的短信"+"内容:"+content,Toast.LENGTH_LONG).show();
//对于特定的内容,取消广播
abortBroadcast();
}
else
{
Toast.makeText(context,"收到:"+sender+"内容:"+content+"时间:"+sendTime.toString(),Toast.LENGTH_LONG).show();
}
}
}
}//if判断广播消息结束
}
}