前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭
在service包下定义一个类CallSmsSafeService继承系统的Service
重写onCreate()方法
获取broadcastReceiver对象,new出来
调用registerReceiver()方法,注册广播,参数:broadcastReceiver对象,IntentFillter对象
重写onDestory()方法
调用unregisterReceiver()方法,参数:broadcastReceiver对象
broadcastReceiver对象置为null
定义一个内部类InnerSmsReceiver继承系统的broadcastReceiver
重写 onReceive()方法,传递进来参数:Context对象,Intent对象
调用Intent对象的getExtras().get(“pdus”)方法,获取到Object[]数组
for循环Object[]数组,每个是Object对象
调用SmsMessage.createFromPdu()方法,获取到SmsMessage对象,参数:byte[]数组,强转Object对象
调用SmsMessage对象的getoriginatingAddress()方法,得到String发件人
调用Dao对象的查询数据库方法,查出这条短信的拦截模式
判断拦截模式,如果是全部拦截3或者短信拦截2,就调用abortbroadcast()方法
在设置中心对上面的服务进行配置,达到开启和关闭的功能
查看这篇:http://www.cnblogs.com/taoshihan/p/5468523.html
CallSmsSafeService.java
package com.qingguow.mobilesafe.service;import androID.app.Service; androID.content.broadcastReceiver; androID.content.Context; androID.content.Intent; androID.content.IntentFilter; androID.os.IBinder; androID.telephony.SmsMessage; com.qingguow.mobilesafe.db.ado.BlackNumberAdo;/** * 短息电话拦截服务 * @author taoshihan * */public class CallSmsSafeService extends Service { private InnerSmsReceiver receiver; BlackNumberAdo ado; @OverrIDe public IBinder onBind(Intent intent) { // Todo auto-generated method stub return null; } * 服务创建 */ @OverrIDe voID onCreate() { receiver=new InnerSmsReceiver(); IntentFilter filter=new IntentFilter("androID.provIDer.Telephony.SMS_RECEIVED"); ado= BlackNumberAdo(getApplicationContext()); registerReceiver(receiver,filter); super.onCreate(); } * 接收广播 * taoshihan * */ private class InnerSmsReceiver broadcastReceiver{ @OverrIDe onReceive(Context context,Intent intent) { Object[] obJs=(Object[]) intent.getExtras().get("pdus"); for(Object obj:obJs){ SmsMessage sms=SmsMessage.createFromPdu((byte[]) obj); String sender=sms.getoriginatingAddress(); String mode=ado.find(sender); if(mode!=){ if (mode.equals("2") || mode.equals("3")) { System.out.println("拦截短信:" + sender); abortbroadcast(); } } } } } @OverrIDe onDestroy() { unregisterReceiver(receiver); receiver=; .onDestroy(); }}
ado类
com.qingguow.mobilesafe.db.ado; java.util.ArrayList; java.util.HashMap; java.util.List; java.util.Map; androID.content.ContentValues; androID.database.Cursor; androID.database.sqlite.sqliteDatabase; com.qingguow.mobilesafe.db.BlackNumberDBOpenHelper;class BlackNumberAdo { BlackNumberDBOpenHelper helper; BlackNumberAdo(Context context) { helper = BlackNumberDBOpenHelper(context); } * 插入数据 * * @param phone * mode add(String phone,String mode) { sqliteDatabase db = helper.getWritableDatabase(); ContentValues values = ContentValues(); values.put("phone",phone); values.put("mode" * 查询全部 * * @return public List<Map<String,String>> findAll() { sqliteDatabase db = helper.getReadableDatabase(); Cursor cursor = db.rawquery( "select phone,mode from blacknumber order by ID desc",1)">); List<Map<String,String>> List = new ArrayList<Map<String,1)">(); while (cursor.movetoNext()) { Map<String,String> info = new HashMap<String,String>(); String phone = cursor.getString(0); String mode = cursor.getString(1); info.put("phone"return List; } * 修改数据 * * update(String phone,mode); db.update("blacknumber",values,"phone=?",1)"> String[] { phone }); db.close(); } * 删除数据 * * phone delete(String phone) { sqliteDatabase db = helper.getWritableDatabase(); db.delete("blacknumber",1)"> * 查找单条 * * String find(String phone) { sqliteDatabase db = db.rawquery( "select mode from blacknumber where phone=?" String[] { phone }); if (cursor.movetoNext()) { String mode = cursor.getString(0 mode; } ; }}
总结
以上是内存溢出为你收集整理的[android] 手机卫士黑名单功能(短信拦截)全部内容,希望文章能够帮你解决[android] 手机卫士黑名单功能(短信拦截)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)