Android开发&短信拦截与读取,消息通知Notification

时间:2025-02-09 09:19:30
public class SMSInterceptReceiver extends BroadcastReceiver { final String ACTION_SMS_RECEIVED=".SMS_RECEIVED"; //有新短信时系统发出的广播,有序,可拦截。 public SMSInterceptReceiver() { } @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. String contact; //发送短信的号码 Boolean intercept=false; //布尔变量,表示是否拦截 if(().equals(ACTION_SMS_RECEIVED)){ StringBuilder builder=new StringBuilder(); Bundle bundle=(); if(bundle!=null){ Object[] pdus=(Object[])("pdus"); //从Intent中获取bundle对象,此对象包含了所有的信息,短信是以“pdus”字段存储的。得到的是一个object数组,每个object都包含一条短信,(可能会获取到多条信息)。 SmsMessage[]messages=new SmsMessage[]; //新建SmsMessage数组对象存储短信,每个SmsMessage对应一条短信类。 for(int i=0;i<;i++){ messages[i]=((byte[])pdus[i]); } contact=messages[-1].getDisplayOriginatingAddress(); //获取得到的最末端短信的联系人地址,赋值给contact if(!().query(.CONTENT_URI,null,"data1=?",new String[]{contact},null).moveToFirst()){ intercept=true; abortBroadcast(); //从系统通信录读取联系人,条件为data1=contact,“data1”是对应的字符串;对得到的cursor对象如果莫veToFirst()为false,说明没有该联系人,因此intercept为真,然后中断广播传播。 } ("发送人:" + contact + "\n" + "内容:"); (messages[-1].getDisplayMessageBody()); //读取短信内容,getDisplayMessageBody()是获取正文消息。 Intent intent1=new Intent(context,); ("SMS", ()); ("intercept",intercept); //新建intent,然后将短信内容和interceput传入对应的bundle中,当有活动或者服务相应时便可读取数据。 (Intent.FLAG_ACTIVITY_NEW_TASK); //因为这是静态注册的监听器,应用程序很可能就没有启动,Intent.FLAG_ACTIVITY_NEW_TASK表示活动开始在新的栈中。(具体可参考android四种活动模式) PendingIntent pi=(context,0,intent1,0); builder1=new (context); //在API14以后,setLatestEventInfo()函数被废弃,因此要想新建通知栏消息,就需要借助Notification的内部类Builder,该构造方法接收一个参数Context。 (.ic_launcher).setContentTitle("您有一条新信息"). setContentText("点击查看"); //设置通知图标,设置通知标题,设置通知内容,这三个部分必须设置,否则通知栏不显示或者直接闪退。 (true); //设置点击后自动消失,否则需要代码取消通知栏消息。 (pi); //设置点击通知栏后的“意图”。 ("new message"); //设置消息来临时在最上方显示的内容,会闪一下,然后消失。 (new long[]{0, 1000, 1000, 2000}); //设置震动,参数为long数组(还可以有第二个参数),第一个元素表示暂停时间,第二个元素表示震动时间,第三个位置表示暂停时间……,第二个参数是一个int型,为-1表示不重复,为0或者正数表示从相应位置元素开始重复震动。 NotificationManager manager=(NotificationManager)(Context.NOTIFICATION_SERVICE); Notification notification=(); =Notification.FLAG_AUTO_CANCEL; (2, notification); //从上下文获取通知栏管理对象,然后注册这个消息。 (context,"new Message",Toast.LENGTH_SHORT).show(); } }else { throw new UnsupportedOperationException("Not yet implemented"); } } }