Android广播常用案例

ip拨号器

以拨打电话广播接收为例介绍步骤:
1. 定义一个类 继承 BroadCastReceiver ,并重写onReceive函数
2. 在清单文件注册广播接收 Receiver   action  
<receiver android:name="com.itheima.ipcall.OutCallBroadCastReceiver" />
<intent-filter >
           <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
3. 广播事件到来之后就会执行onReceive

注意:即使广播接收者没有运行,当广播消息到达的时候,系统会自动启动广播接收者的进程,调用onReceive方法,接收消息。
4.0版本之后为了安全考虑,要求应用程序必须要有界面,必须被用户运行过一次(待验证),广播接受者才会生效
4.0版本的强行停止相当于冻结一个应用,一旦应用程序被用户强行停止了,广播接受者就不会生效了。直到用户手工打开这个应用程序为止。

在onReceive中获取数据并修改(NEW_OUTGOING_CALL广播为有序广播,可以修改数据下面会介绍有序广播)
public class OutGoingCallReceiver extends BroadcastReceiver{

	//当我接收到 外拨电话的事件的时候  会执行该方法 
	@Override
	public void onReceive(Context context, Intent intent) {
		//1 获取到当前我拨打的号码  
		String number = getResultData();  //获取我们外拨电话号码 
		//2 获取ip号码
		SharedPreferences sp  = context.getSharedPreferences("config", 0);
		String ipNumber = sp.getString("number", "");
		//3 把ipnumber 加入到  拨打号码的前面
		if (number.startsWith("0")) {
			String newNumber = ipNumber + number;   //新号码  
			// 改变当前 广播的结果 
			setResultData(newNumber);	
		}
	}

}

短信监听器

主要配置

  <uses-permission android:name="android.permission.RECEIVE_SMS"/>

	 <receiver android:name="com.itheima.smslistener.SMSBroadCastReceiver">
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>	

onReceive代码

public class SMSBroadCastReceiver  extends BroadcastReceiver{
	
		@Override
		public void onReceive(Context context, Intent intent) {
			
			Object[] objs = (Object[]) intent.getExtras().get("pdus");
			for(Object obj : objs){
				SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj);
				String content = sms.getMessageBody();
				
				String srcPhone = sms.getOriginatingAddress();
				
				System.out.println("content========"+content);
				System.out.println("srcPhone========"+srcPhone);
				
		}
	}

SD卡状态监听

主要配置

<receiver android:name="com.itheima.sdlistener.SDBroadCastReceiver">
	            <intent-filter >
	                <action android:name="android.intent.action.MEDIA_MOUNTED" />
	                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
	                <action android:name="android.intent.action.MEDIA_REMOVED" />
	             <!-- 必须加上data这个属性 -->
	                <data android:scheme="file"/>
	            </intent-filter>
            
        </receiver>

onReceive代码

public class SDBroadCastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		 
		String action = intent.getAction();
		
		if("android.intent.action.MEDIA_MOUNTED".equals(action)){
			Toast.makeText(context, "已经插上了SD卡.................", 0).show();
		}
		if("android.intent.action.MEDIA_UNMOUNTED".equals(action)){
			Toast.makeText(context, "拔掉了SD卡.................", 0).show();
		}
		
		if("android.intent.action.MEDIA_REMOVED".equals(action)){
			Toast.makeText(context, " 移除了SD卡.................", 0).show();
		}


	
	}
}

开机启动监听

目的

让软件开机后打开,并关闭不了:
    禁用返回键和最小化键(小房子键);

主要配置

<receiver android:name="com.itheima.lesuo.BootCompletedBroadCastReceiver">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

onReceive代码

public class BootCompletedBroadCastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		
		//开启mainactivity
		Intent i = new Intent(context,MainActivity.class);
		//告诉activity自己来维护任务栈,如果任务栈没有当前任务,就会重新创建一个任务放入任务栈
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		
		context.startActivity(i);
		System.out.println("***********88888888888启动完成*********************************");
		}

	}

软件卸载安装

主要配置

<receiver android:name="com.itheima.azxz.AZXZBroadCastReceiver">
            
            <intent-filter >
                <action android:name="android.intent.action.PACKAGE_INSTALL" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <action android:name="android.intent.action.PACKAGE_ADDED" />
               <!--   必须添加这个属性 -->
                <data android:scheme="package"/>
            </intent-filter>
        </receiver>

onReceive代码

public class AZXZBroadCastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		

		String action = intent.getAction();
		
		if("android.intent.action.PACKAGE_INSTALL".equals(action)){
			Toast.makeText(context, "安装了一个新软件...................", 0).show();
		}
		
		if("android.intent.action.PACKAGE_REMOVED".equals(action)){
			Toast.makeText(context, "卸载了一个软件...................", 0).show();
		}
		
		if("android.intent.action.PACKAGE_REPLACED".equals(action)){
			Toast.makeText(context, "重新安装了一个软件...................", 0).show();
		}
		
	}
	}

发送自定义广播(无序广播)

    创建广播发送者的步骤:

//创建一个传递消息的意图对象
Intent intent = new Intent();
//设置要广播的事件类型
intent.setAction("com.itheima.broadcast.HMSSDT");
//设置广播的消息数据
intent.putExtra("news", "49期,晚上12点半准时开播.........");
//发送一个广播消息
sendBroadcast(intent);

有序广播和无序广播

* 无序广播:

广播接收者只要注册接收相应的事件类型,就能接收到的广播;

  //发送一个广播消息(无序广播)
sendBroadcast(intent);

* 有序广播:

当广播把消息发送出去后,消息会根据广播接收者的优先级从高到低一级一级地下发消息。
可以拦截消息,也可以修改消息。

   发送有序广播:

Intent intent = new Intent();
		
        intent.setAction("com.itheima.orderedbroadcast.ZYFFNTBT");
        //发送一个有序的广播
        //intent 意图
        //permission 指定接收者需要添加了权限
        //resultReceiver 指定哪个广播接收者最后接到消息(这个广播接收者不需要注册也可以接收广播)
        //scheduler 消息处理器
        //initialCode 给消息指定初始代码
        //initialData 指定消息的数据
        //initialExtras 指定额外的参数
        sendOrderedBroadcast(intent, null, null, null, 1, "国务院开始发放2014年农田补贴:900元", null);



  有序广播接收者的配置文件:

	 <receiver android:name="com.itheima.zf.ProvinceBroadCastReceiver">
            <intent-filter android:priority="1000" >
                <action  android:name="com.itheima.orderedbroadcast.ZYFFNTBT"/>
            </intent-filter>
        </receiver>

 有序广播接收者的代码:

		String info = getResultData();
		System.out.println("---------我是省级人民政府,已经接收到了中央发的消息:"+info);
		
	   //Toast.makeText(context, "我是省级人民政府,已经接收到了中央发的消息:"+info, 0).show();
        setResultData("国务院开始发放2014年农田补贴:400元");







  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Barry__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值