Android开发&短信拦截与读取,消息通知Notification
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");
}
}
}