首页 > 系统 > Android > 正文

Android中实现基本的短信拦截功能的代码示例

2019-12-12 06:31:43
字体:
来源:转载
供稿:网友

要点

1.在Manifest.xml里加"接收"SMS的权限

<uses-permission Android:name="android.permission.RECEIVE_SMS"></uses-permission>

2.在Manifest.xml里注册一个receive

<!-- 注册Receiver,并且设置优先级 -->    <receiver android:name=".AutoSMS" android:exported="false">  <intent-filter android:priority="1000">  <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  </intent-filter> </receiver>

3.定义一个短信接收类,并且重写onReceive

//继承BroadcastReceiverpublic class AutoSMS extends BroadcastReceiver { private String TAG="AutSMS"; //广播消息类型 public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; //覆盖onReceive方法 @Override public void onReceive(Context context, Intent intent)  {.....

实例
下面是完整的代码:

Manifest.xml:

<manifest xmlns: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-permission android: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>         <action android:name="android.intent.action.MAIN" />          <category android:name="android.intent.category.LAUNCHER" />       </intent-filter>     </activity>     <!-- 注册Receiver,并且设置优先级 -->     <receiver android:name=".AutoSMS" android:exported="false">       <intent-filter android:priority="1000">         <action android:name="android.provider.Telephony.SMS_RECEIVED"/>       </intent-filter>     </receiver>        </application>  </manifest> 

AutoSMS.java:

package com.xxh.autosms;  import java.text.SimpleDateFormat; import java.util.Date;  import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; import android.widget.Toast;  //继承BroadcastReceiver public class AutoSMS extends BroadcastReceiver  {    private String TAG="AutSMS";   //广播消息类型   public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";   //覆盖onReceive方法   @Override   public void onReceive(Context context, Intent intent)    {     // TODO Auto-generated method stub     Log.i(TAG, "引发接收事件");     //StringBuilder body=new StringBuilder("");//短信内容     //StringBuilder sender=new StringBuilder("");//发件人     //先判断广播消息     String action = intent.getAction();     if (SMS_RECEIVED_ACTION.equals(action))     {       //获取intent参数       Bundle bundle=intent.getExtras();       //判断bundle内容       if (bundle!=null)       {         //取pdus内容,转换为Object[]         Object[] pdus=(Object[])bundle.get("pdus");         //解析短信         SmsMessage[] messages = new SmsMessage[pdus.length];         for(int i=0;i<messages.length;i++)         {           byte[] pdu=(byte[])pdus[i];           messages[i]=SmsMessage.createFromPdu(pdu);         }           //解析完内容后分析具体参数         for(SmsMessage msg:messages)         {           //获取短信内容           String content=msg.getMessageBody();           String sender=msg.getOriginatingAddress();           Date date = new Date(msg.getTimestampMillis());           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");           String sendTime = 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 判断广播消息结束   }  } 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表