按關(guān)鍵詞轉(zhuǎn)發(fā)短信至指定手機(jī)號
源碼簡介
很多時(shí)候我們需要對短信進(jìn)行篩選,將指定短信轉(zhuǎn)發(fā)到特定手機(jī)號,以防止遺漏重要內(nèi)容,本程序就是實(shí)現(xiàn)這個(gè)功能??梢栽O(shè)置全部轉(zhuǎn)發(fā),也可設(shè)置只轉(zhuǎn)發(fā)設(shè)置關(guān)鍵詞內(nèi)容的轉(zhuǎn)發(fā)??稍O(shè)置多個(gè)關(guān)鍵詞,關(guān)鍵詞以空格或者逗號分隔。
轉(zhuǎn)發(fā)全部短信時(shí),將忽略關(guān)鍵詞設(shè)置。打開關(guān)鍵詞模式時(shí),忽略全部轉(zhuǎn)發(fā)的開關(guān)。開發(fā)這個(gè)的原因在于,網(wǎng)上現(xiàn)在有些類似功能的,但多數(shù)是轉(zhuǎn)發(fā)到email,一般不提供轉(zhuǎn)發(fā)短信功能,而有的轉(zhuǎn)發(fā)短信的是付費(fèi)服務(wù),同時(shí)所有短信會(huì)被發(fā)送到他們的服務(wù)器,造成信息安全、隱私泄露隱患。
包名、文件名方面需注意,不要寫sms forward字眼,否則會(huì)被防火墻阻擋。
源碼運(yùn)行截圖
源碼片段:
- public class SmsReceiver extends BroadcastReceiver {
 - static final Object mStartingServiceSync = new Object();
 - static PowerManager.WakeLock mStartingService=null;
 - private static SmsReceiver sInstance=null;
 - private static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
 - private StringBuilder msgbody=new StringBuilder();
 - static int recnum=1;
 - static int fwdnum=1;
 - public static SmsReceiver getInstance() {
 - if (sInstance == null) {
 - sInstance = new SmsReceiver();
 - }
 - return sInstance;
 - }
 - @Override
 - public void onReceive(final Context context, Intent intent) {
 - final Context mContext=context;
 - final SharedPreferences settings = context.getSharedPreferences(SmsFilterConfig.APP_SET_NAME, Context.MODE_PRIVATE);
 - boolean isActive = settings.getBoolean(SmsFilterConfig.KEY_IS_ENABLED, false);
 - final boolean isRemoteEnabled = settings.getBoolean(SmsFilterConfig.KEY_FILTER_ENABLED, false);
 - final String telNumber = settings.getString(SmsFilterConfig.KEY_SMS_NO, "");
 - String smskeyword = settings.getString(SmsFilterConfig.SMSKEYWORD, "");
 - SensitivewordFilter filter = new SensitivewordFilter(smskeyword);
 - //beginStartingService(context, intent);
 - if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
 - recnum++;
 - }
 - if ((isActive||isRemoteEnabled)&&intent.getAction().equals(SMS_RECEIVED_ACTION)) {
 - Bundle bundle = intent.getExtras(); // ---get the SMS message passed in---
 - String msg_from = "", message = "";
 - if (bundle != null) {
 - try {
 - Object[] pdus = (Object[])intent.getExtras().get("pdus");
 - SmsMessage[] messages = new SmsMessage[pdus.length];
 - for (int i = 0; i < pdus.length; i++){
 - messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
 - }
 - msgbody.delete(0, msgbody.length());
 - for (SmsMessage mes : messages){
 - msgbody.append(mes.getMessageBody());
 - msg_from = mes.getOriginatingAddress();
 - }
 - message=msgbody.toString().replaceAll("\\s", "");
 - }catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 - if (isRemoteEnabled ) {
 - boolean a= filter.isContaintSensitiveWord (message, 1);Log.d("", "4");
 - //Set<string> set = filter.getSensitiveWord("aaefggh", 1);Log.d("", "4");
 - if (a){
 - isActive = true;
 - }
 - }
 - if (isActive && telNumber != null && telNumber.length() > 0) {
 - SmsManager smsManager = SmsManager.getDefault();
 - smsManager.sendTextMessage(telNumber, null,
 - message+ " -From- " +msg_from, null, null);
 - fwdnum++;
 - }
 - }
 - String title=context.getString(R.string.app_name);
 - String sAgeFormat = context.getString(R.string.notifyinfo);
 - String body=String.format(sAgeFormat, recnum, fwdnum);
 - MessageUtils.updateNotifications(mContext, title, body);
 - //finishBlockSms();
 - /*SharedPreferences.Editor editor = settings.edit();
 - editor.putInt(SmsFilterConfig.KEY_REC_NUM, recnum);
 - editor.commit();*/
 - //MessageUtils.writeIntPref(mContext,SmsFilterConfig.KEY_REC_NUM, recnum);
 - // MessageUtils.writeIntPref(mContext,SmsFilterConfig.KEY_FWD_NUM, fwdnum);
 - }
 - @SuppressWarnings("deprecation")
 - public static void updateNotifications(Context mContext,String title,String body){
 - NotificationManager nm;
 - Intent mIntent;
 - PendingIntent pd;
 - Notification baseNF;
 - nm = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
 - mIntent=new Intent("com.dx.util.SmsFilterConfig");
 - mIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
 - pd = PendingIntent.getActivity(mContext, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT); //如果轉(zhuǎn)移內(nèi)容則用m_Intent();
 - baseNF = new Notification();
 - baseNF.icon = R.drawable.icon;
 - baseNF.tickerText = title;
 - baseNF.flags |= Notification.FLAG_NO_CLEAR;
 - //設(shè)置通知顯示的參數(shù)
 - baseNF.setLatestEventInfo(mContext, title, body, pd);
 - nm.notify(R.string.app_name, baseNF);
 - }
 - }</string>
 
源碼鏈接:http://down.51cto.com/data/1985029
















 
 
 
 
 
 
 