您的位置:首页 > 移动开发 > Android开发

android 编写拦截拦截短信的service

2016-05-09 20:08 507 查看
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();
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: