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 void onCreate()
{
}
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(); }
}
相关文章推荐
- 自学android, java, html, css, php, mysql, javascript路线
- Android—菜单
- Android-GestureOverlayView自定义手势命令
- Gradle Android客户端程序打包(基于gradle 2.10版本验证通过)
- 我的Android进阶之旅------>Android通用流行框架大全
- Android高效加载大图、多图解决方案,有效避免程序OOM
- android集成genymotion
- Android Service与Activity之间通信的几种方式
- 我的android服务器端,看一下是什么问题?
- Android多进程导致的问题
- AndroidStudio 快捷键大全
- Android音频系统之音频框架
- Android 图片加载类一 ImageLoader
- android canvas与图层的关系
- Android 中的应用组件--Service
- android简单应用(一)
- 1、fragment的使用封装(上)
- android TextView.setText
- Attribute is missing the Android namespace prefix
- Android 中的应用组件之----Content Provider (跨进程私有数据共享)