public class SmsService extends Service {
private SmsReceiver mReceiver = null;
public SmsService() {
}
@Override public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
IntentFilter iFilter = null; // 意图过滤对象
mReceiver = new SmsReceiver(); // 广播接收类初始化
iFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
iFilter.setPriority(Integer.MAX_VALUE); // 设置优先级
GlobalContext.getBusInstance().register(mReceiver);//注册Bus
registerReceiver(mReceiver, iFilter); // 注册广播
}
@Override public void onDestroy() {
super.onDestroy();
if (mReceiver != null){
GlobalContext.getBusInstance().unregister(mReceiver);//取消注册Bus
unregisterReceiver(mReceiver);
}
}
}
接下来就是真正的发布者SmsReceiver了,大部分代码与网上都是一样的,注意看我是如何发布消息的。
public class SmsReceiver extends BroadcastReceiver {
public SmsReceiver() {
}
@Override public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
//获取链路层的协议数据单元
Object[] messages = (Object[]) bundle.get("pdus");
SmsMessage[] sms = new SmsMessage[messages.length];
// Create messages for each incoming PDU
for (int n = 0; n < messages.length; n++) {
sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
for (SmsMessage msg : sms) {
//TODO: 这里应该加上你自己的过滤条件,比如手机号,短信内容
//尽可能的拦截短信,这个命令在MIUI,flyme上都没有用
abortBroadcast();
GlobalContext.getBusInstance().post(msg);
}
}
}
从代码中可以看出,在Service中,我们控制了SmsReceiver中BUS的生命周期,之后在SmsReceiver中,通过post把消息发布出去










