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判断广播消息结束 } }