android 编写拦截拦截短信的service

本文介绍了一种在Android中利用Service和BroadcastReceiver实现短信拦截的方法。通过创建CallSafeService服务并在其中注册短信接收器,可以对指定黑名单中的号码发送的短信进行拦截。此方案适用于希望增强应用程序安全性及提供个性化服务的应用开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.example.mobilesafe.db.dao.BlackNumber;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;

//创建一个service类,并设置在某个时刻开启和关闭
public class CallSafeService extends Service {

//这是我项目的需要自己写的类,实际上跟短息服务没啥大的关系
public BlackNumber bk;

public IBinder onBind(Intent arg0)
{
    // TODO Auto-generated method stub
    return null;
}

//服务创建时会调用的方法
public void onCreate()
{

    super.onCreate();

    //自定义的内部类
    InnerReceiver inner=new InnerReceiver();

   //设置过滤器,接收收到信息的广播
    IntentFilter intentFilter=new      IntentFilter("android.provider.Telephony.SMS_RECEIVED");

//android.provider.Telephony.SMS_RECEIVED 是android内置的接收消息的内容提供者,你可以根据自己的需要选择其他的内容提供者

    //设置权限
    intentFilter.setPriority(Integer.MAX_VALUE);

    //注册广播(这是动态的注册广播)也可以配置文件里手动为服务增加过滤项
    registerReceiver(inner, intentFilter);

    bk=new BlackNumber(this);

}

//定义一个广播接收者的内部类
public class InnerReceiver extends BroadcastReceiver
{

    //当有信息到来时回调的方法
    public void onReceive(Context context, Intent intent)
    {
        System.out.println("短信来了");

        //拿到短信的对象
        Object[] objects=(Object[]) intent.getExtras().get("pdus");

        //// 短信最多140字节,
        // 超出的话,会分为多条短信发送,所以是一个数组,因为我们的短信指令很短,所以for循环只执行一次
        for(Object ob:objects)
        {
            SmsMessage sms = SmsMessage.createFromPdu((byte[]) ob);

            String originAddress=sms.getOriginatingAddress();//得到电话
            String body=sms.getMessageBody();//得到内容主体

            //通过短信的电话号码查询拦截的模式
            String mode = bk.findNumber(originAddress);

        //下面这些是我项目需要的业务逻辑,实际上拦截只需要 abortBroadcast();这句就够啦,你也可以根据自己的条来选择性的拦截
            /**
             * 黑名单拦截模式
             * 1 全部拦截 电话拦截 + 短信拦截
             * 2 电话拦截
             * 3 短信拦截
             */
            if(mode.equals("1"))
            {
                //终止信息传播
               abortBroadcast();
            }else if(mode.equals("3"))
            {
                abortBroadcast();
            }
        }

    }

}

//服务结束
public void onDestroy()
{
    // TODO Auto-generated method stub
    super.onDestroy();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值