按关键词转发短信至指定手机号
创始人
2025-01-10 18:41:07
0次

源码简介

很多时候我们需要对短信进行筛选,将指定短信转发到特定手机号,以防止遗漏重要内容,本程序就是实现这个功能。可以设置全部转发,也可设置只转发设置关键词内容的转发。可设置多个关键词,关键词以空格或者逗号分隔。
转发全部短信时,将忽略关键词设置。打开关键词模式时,忽略全部转发的开关。开发这个的原因在于,网上现在有些类似功能的,但多数是转发到email,一般不提供转发短信功能,而有的转发短信的是付费服务,同时所有短信会被发送到他们的服务器,造成信息安全、隐私泄露隐患。
包名、文件名方面需注意,不要写sms forward字眼,否则会被防火墙阻挡。
源码运行截图

源码片段:

  1. public class SmsReceiver extends BroadcastReceiver { 
  2.     static final Object mStartingServiceSync = new Object(); 
  3.     static PowerManager.WakeLock mStartingService=null; 
  4.     private static SmsReceiver sInstance=null; 
  5.     private static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; 
  6.     private StringBuilder msgbody=new StringBuilder(); 
  7.     static int recnum=1; 
  8.     static int fwdnum=1; 
  9.       
  10.     public static SmsReceiver getInstance() { 
  11.         if (sInstance == null) { 
  12.             sInstance = new SmsReceiver(); 
  13.         } 
  14.         return sInstance; 
  15.     } 
  16.   
  17.     @Override 
  18.     public void onReceive(final Context context, Intent intent) { 
  19.         final Context mContext=context; 
  20.           
  21.         final SharedPreferences settings = context.getSharedPreferences(SmsFilterConfig.APP_SET_NAME, Context.MODE_PRIVATE); 
  22.         boolean isActive = settings.getBoolean(SmsFilterConfig.KEY_IS_ENABLED, false); 
  23.         final boolean isRemoteEnabled = settings.getBoolean(SmsFilterConfig.KEY_FILTER_ENABLED, false); 
  24.         final String telNumber = settings.getString(SmsFilterConfig.KEY_SMS_NO, ""); 
  25.         String smskeyword = settings.getString(SmsFilterConfig.SMSKEYWORD, ""); 
  26.         SensitivewordFilter filter = new SensitivewordFilter(smskeyword); 
  27.           
  28.         //beginStartingService(context, intent); 
  29.           
  30.         if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
  31.             recnum++; 
  32.         } 
  33.         if ((isActive||isRemoteEnabled)&&intent.getAction().equals(SMS_RECEIVED_ACTION)) { 
  34.             Bundle bundle = intent.getExtras(); // ---get the SMS message passed in--- 
  35.             String msg_from = "", message = ""; 
  36.             if (bundle != null) { 
  37.                 try { 
  38.                     Object[] pdus = (Object[])intent.getExtras().get("pdus"); 
  39.                     SmsMessage[] messages = new SmsMessage[pdus.length]; 
  40.                     for (int i = 0; i < pdus.length; i++){ 
  41.                         messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
  42.                     } 
  43.                     msgbody.delete(0, msgbody.length()); 
  44.                     for (SmsMessage mes : messages){ 
  45.                         msgbody.append(mes.getMessageBody()); 
  46.                         msg_from = mes.getOriginatingAddress(); 
  47.                     } 
  48.                     message=msgbody.toString().replaceAll("\\s", ""); 
  49.                 }catch (Exception e) { 
  50.                     e.printStackTrace(); 
  51.                 } 
  52.             } 
  53.             if (isRemoteEnabled ) { 
  54.                 boolean a= filter.isContaintSensitiveWord (message, 1);Log.d("", "4"); 
  55.                 //Set set = filter.getSensitiveWord("aaefggh", 1);Log.d("", "4"); 
  56.                 if (a){ 
  57.                     isActive = true; 
  58.                 } 
  59.             } 
  60.   
  61.             if (isActive && telNumber != null && telNumber.length() > 0) { 
  62.                 SmsManager smsManager = SmsManager.getDefault(); 
  63.                 smsManager.sendTextMessage(telNumber, null, 
  64.                         message+ " -From- " +msg_from, null, null); 
  65.                 fwdnum++; 
  66.             } 
  67.         } 
  68.         String title=context.getString(R.string.app_name); 
  69.         String sAgeFormat = context.getString(R.string.notifyinfo); 
  70.         String body=String.format(sAgeFormat, recnum, fwdnum); 
  71.         MessageUtils.updateNotifications(mContext, title, body); 
  72.         //finishBlockSms(); 
  73.         /*SharedPreferences.Editor editor = settings.edit(); 
  74.         editor.putInt(SmsFilterConfig.KEY_REC_NUM, recnum); 
  75.         editor.commit();*/ 
  76.         //MessageUtils.writeIntPref(mContext,SmsFilterConfig.KEY_REC_NUM, recnum); 
  77.        // MessageUtils.writeIntPref(mContext,SmsFilterConfig.KEY_FWD_NUM, fwdnum); 
  78.     } 
  79.     @SuppressWarnings("deprecation") 
  80.     public static void updateNotifications(Context mContext,String title,String body){ 
  81.         NotificationManager nm; 
  82.         Intent  mIntent; 
  83.         PendingIntent pd; 
  84.         Notification  baseNF; 
  85.         nm = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 
  86.         mIntent=new Intent("com.dx.util.SmsFilterConfig"); 
  87.         mIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK); 
  88.         pd = PendingIntent.getActivity(mContext, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT); //如果转移内容则用m_Intent(); 
  89.         baseNF = new Notification(); 
  90.         baseNF.icon = R.drawable.icon; 
  91.         baseNF.tickerText = title; 
  92.         baseNF.flags |= Notification.FLAG_NO_CLEAR;  
  93.         //设置通知显示的参数 
  94.         baseNF.setLatestEventInfo(mContext, title, body, pd); 
  95.         nm.notify(R.string.app_name, baseNF); 
  96.     } 
  97. } 

源码链接:http://down.51cto.com/data/1985029

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...