康哥blog

康哥学网

[转载]android 短信拦截器 代码

 今天转的一个短信拦截器,我修改过可以完美实现。在这个拦截器中,可以有两种方式来设置拦截,一种是在AndroidManifest.xml直接设置拦截,另外一种是通过手动注册来设计拦截。在这里我们需要通过查文档找到短信收发的一些权限。
下面我附上自己做的这个拦截器的代码供大家参考。
main.xml layout

Java代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.    android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >   
  7. <Button     
  8.    android:layout_width="fill_parent"    
  9.     android:layout_height="wrap_content"    
  10.     android:text="注册拦截"  
  11.      android:onClick="regiset"  
  12.      />   
  13.  <Button     
  14.      android:layout_width="fill_parent"    
  15.      android:layout_height="wrap_content"    
  16.      android:text="解注册拦截"  
  17.      android:onClick="unregiset"  
  18.      />   
  19. </LinearLayout>  

 

首页显示的SmsListenerActivity:

Java代码
  1. package com.tk178zhe.android.SmsListener;   
  2.      
  3.   import android.app.Activity;   
  4.   import android.content.IntentFilter;   
  5.   import android.os.Bundle;   
  6.   import android.view.View;   
  7.   import android.widget.Toast;   
  8.      
  9.   public class SmsListenerActivity extends Activity {   
  10.      private SmsRecevier recevier;   
  11.      private boolean isregiset false;   
  12.      private static final String ACTION "android.provider.Telephony.SMS_RECEIVED";   
  13.     
  14.      @Override  
  15.      public void onCreate(Bundle savedInstanceState) {   
  16.          super.onCreate(savedInstanceState);   
  17.          setContentView(R.layout.main);   
  18.          recevier new SmsRecevier();   
  19.      }   
  20.      public void regiset(View v) {   
  21.          IntentFilter filter new IntentFilter(ACTION);   
  22.          filter.setPriority(1000);//设置优先级最大  
  23.          registerReceiver(recevier, filter);   
  24.          isregiset true;   
  25.          Toast.makeText(this"注册成功"0).show();   
  26.      }   
  27.     
  28.      public void unregiset(View v) {   
  29.          if (recevier != null && isregiset) {   
  30.               unregisterReceiver(recevier);   
  31.              isregiset false;   
  32.              Toast.makeText(this"解注册成功"0).show();   
  33.          else  
  34.              Toast.makeText(this"尚未注册"0).show();   
  35.      }   
  36.      @Override  
  37.      protected void onDestroy() {   
  38.          super.onDestroy();   
  39.          if (recevier != null && isregiset) {   
  40.               unregisterReceiver(recevier);   
  41.              isregiset false;   
  42.              Toast.makeText(this"解注册成功"0).show();   
  43.          }   
  44.      }   
  45.   

 

 

如果是利用手动的来注册拦截,那么就不需要在AndroidManifest.xml中设置recevier了。不过利用手动的来设置拦截,那就和做的这个拦截器的需要不相符了,这里我只是为了更加明显的说明广播的机制。
AndroidManifest.xml:

Java代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2.  <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.        package="com.tk178zhe.android.SmsListener"  
  4.        android:versionCode="1"  
  5.        android:versionName="1.0">   
  6.      <uses-sdk android:minSdkVersion="8" />   
  7.     
  8.      <application android:icon="@drawable/icon" android:label="@string/app_name">   
  9.          <activity android:name=".SmsListenerActivity"  
  10.                   android:label="@string/app_name">   
  11.             <intent-filter>   
  12.                 <action android:name="android.intent.action.MAIN" />   
  13.                 <category android:name="android.intent.category.LAUNCHER" />   
  14.             </intent-filter>   
  15.         </activity>   
  16.         <!-- 这是隐式的设置receiver 我们做的这个拦截器需要这样去做   
  17.         <receiver android:name=".SmsRecevier">   
  18.             <intent-filter android:priority="1000"将优先级设到最大   
  19.                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />   
  20.             </intent-filter>   
  21.         </receiver>   
  22.          -->       
  23.     </application>   
  24.      <uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->   
  25.     <uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->   
  26.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />   
  27. </manifest>  

 

SmsRecevier类用作拦截信息。

Java代码 
 package com.tk178zhe.android.android;   
  1.     
  2.  import java.text.SimpleDateFormat;   
  3.  import java.util.Date;   
  4.     
  5.  import android.content.BroadcastReceiver;   
  6.  import android.content.Context;   
  7.  import android.content.Intent;   
  8.  import android.telephony.SmsManager;   
  9.  import android.telephony.SmsMessage;   
  10.  import android.util.Log;   
  11.     
  12.  public class SmsRecevier extends BroadcastReceiver {   
  13.      public SmsRecevier() {   
  14.          Log.v("TAG""SmsRecevier create");   
  15.      }   
  16.     
  17.     public void onReceive(Context context, Intent intent) {
      Log.v("TAG", ">>>>>>>onReceive start>>>>>>>");
      StringBuilder body = new StringBuilder();// 短信内容
      StringBuilder number = new StringBuilder();// 短信发件人
      Bundle bundle = intent.getExtras();
      if (bundle != null) {
       Object[] _pdus = (Object[]) bundle.get("pdus");
       SmsMessage[] message = new SmsMessage[_pdus.length];
       for (int i = 0; i < _pdus.length; i++) {
        message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
       }
       for (SmsMessage currentMessage : message) {
        body.append(currentMessage.getDisplayMessageBody());
        number.append(currentMessage.getDisplayOriginatingAddress());
       }
       String smsBody = body.toString();
       String smsNumber = number.toString();
       if (smsNumber.contains("+86")) {
        smsNumber = smsNumber.substring(3);
       }
       Log.v("TAG", "smsBody=" + smsBody + " smsNumber=" + smsNumber);
       // 确认该短信内容是否满足过滤条件
       if (smsNumber.equals("15555215554")) {// 屏蔽发来的短信
        this.abortBroadcast();
        Log.v("TAG", "sms_number.equals(15555215554)");
       }
      }
     }
  18.  

这样一个短信拦截器就做好了。

发表评论:

Powered By Z-BlogPHP 1.6.4 Valyria

康哥工作室 鲁ICP备15037495号-1