1. 发送广播

使用以下三个API可以发送广播

public void click(View view){
		Intent intent = new Intent();
		intent.setAction("com.itheima.xxxooo");
		//把这个自定义的广播发送出去
		//sendBroadcast(intent); //发送一条无序的广播事件
		//如果广播事件是无序发送出去的 所有的广播接受者 都会接受到这个事件
		
		//如果广播是有序的发送出去的, 广播接收者会按照优先级 接受到广播事件
		// 有序广播 特点: 高优先级的广播接受者 可以终止掉 广播事件
		//sendOrderedBroadcast(intent, null);
		
		//第三个参数设置, 无论此接受者的优先级有多低,或是其他中断了广播,他最后都能接收到
		sendOrderedBroadcast(intent, null, new FinalRecevier(), null, 0, null, null);
	}

2. 接收广播,继承BroadCastReceiver, 需要在xml权限中注册接收器, 并且有些广播需要添加权限

public class MyBroadcastReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("reveriver 1 接收到了广播");
		Toast.makeText(context, "检查到了 自定义的广播事件", 1).show();
	}	
}
AndroidManifest.xml 注册接受者  可以设置优先级  int, 值越大 优先级越高

广播接收者的注册可以在xml文件中, 也可以在代码中注册(一般在 onCreate这样的开始创建的方法中注册) 

MyBroadcastReceiver  myReceiver = new MyBroadcastReceiver ();
IntentFilter filter = new IntentFilter();
filter.addAction("com.kevin.xxxooo");
registerReceiver(myReceiver, filter);


3. 示例:拦截电话拨号

public class OutCallReceiver extends BroadcastReceiver {

	//当有广播事件产生的时候 就会执行onrecevie方法
	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("onreceiver 发现了新的外拨电话...");
		String number = getResultData();//外拨的电话号码
		System.out.println("number="+number);
		//替换掉这个号码
		
		SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
		String ipnumber = sp.getString("ipnumber", "");
		String newnumber = ipnumber+number;
		//设置外拨的电话号码
		setResultData(newnumber);
		//不会生效的 广播终止不了 显示的指定了接受者
		abortBroadcast();		
	}
}

AndroidManifest.xml  需要设置权限 和 注册广播接收者

 

4.示例: 短信拦截

public class SmsReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("短信收到了...");

		Object[] pdus = (Object[]) intent.getExtras().get("pdus");
		for (Object pdu : pdus) {
			SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
			String body = smsMessage.getMessageBody();
			String sender = smsMessage.getOriginatingAddress();
			System.out.println("body:" + body);
			System.out.println("sender:" + sender);
			if ("5556".equals(sender)) {
				// 短信的拦截, 高优先级的receiver将短信拦截,低优先级的就接受不到了
				abortBroadcast();
				SmsManager smsManager = SmsManager.getDefault();
				smsManager.sendTextMessage(sender, null, "我已经喜欢上 xxx了 ,你去死吧", null, null);
			}

		}
	}
}

AndroidManifest.xml 权限配置




 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-03-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
相关资源
相似解决方案