广播接收器代码:
public class SmsReceiver extends BroadcastReceiver {
private SmsMessage[] mMges;
private static final String TAG = "SmsReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
StringBuffer msgText = new StringBuffer();
String sender =null;
//获取Bundle
Bundle bundle = intent.getExtras();
if (bundle != null) {
//获取短信内容
Object[] pdus = (Object[]) bundle.get("pdus");
//构建短信对象数组
mMges = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
mMges[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
for (SmsMessage mge : mMges) {
msgText.append("短信来自:"+mge.getDisplayOriginatingAddress()+"\n");
msgText.append("短信内容"+mge.getDisplayMessageBody());
//如果发送人是5555,拦截该短信
sender = mge.getDisplayOriginatingAddress();
Log.d(TAG, "address->"+sender);
if ("5555".equals(sender)) {
abortBroadcast();
Log.d(TAG, "黑名单号码,已经拦截");
}
}
Toast.makeText(context,msgText.toString(),Toast.LENGTH_LONG).show();
}
}
}
}
注册广播及申请权限:
@RequiresApi(api = Build.VERSION_CODES.M)
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
private IntentFilter mIntentFilter;
private SmsReceiver mSmsReceiver;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
RegisterSmsReceiver();
}
private void checkPermission() {
int result_receiver = checkSelfPermission(Manifest.permission.RECEIVE_SMS);
int result_read = checkSelfPermission(Manifest.permission.READ_SMS);
if (result_receiver!= PackageManager.PERMISSION_GRANTED || result_read!=PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.RECEIVE_SMS,Manifest.permission.READ_SMS},REQUEST_CODE);
}
}
private void RegisterSmsReceiver() {
mSmsReceiver = new SmsReceiver();
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
mIntentFilter.setPriority(9999);
mIntentFilter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(mSmsReceiver, mIntentFilter);
}
@Override
protected void onDestroy() {
if (mSmsReceiver != null) {
unregisterReceiver(mSmsReceiver);
}
super.onDestroy();
}
}
打印的日志:
2020-03-17 16:39:29.431 22422-22422/com.example.smsreceiverdemo D/SmsReceiver: address->5555
2020-03-17 16:39:29.431 22422-22422/com.example.smsreceiverdemo D/SmsReceiver: 黑名单号码,已经拦截
用的是5555号码测试的,模拟器上依然能够收到短信
您的每一个用心回答,都会让这个世界变得更美好一些!