BroadcastReceiver

A类(abstract 类)

AS中创建:New>Other>BroadcastReceiver

两种类型:

  1. Normal broadcasts (sent with Context.sendBroadcast)
  2. Ordered broadcasts (sent with Context.sendOrderedBroadcast)

无序广播不可以被拦截,不可以被终止,不可以被修改,无序广播任何接收者只要匹配条件都可以接收到,无优先级问题。

如果想通过无序广播传递数据,则可以调用intent.putExtra方法传递, 接收者可通过intent.get…接收,不可通过getResultData接收。

1.标准广播

Manifest配置:

<receiver
	 android:name=".MyReceiver"
	 android:enabled="true"
	 android:exported="true">
	 //设定接收哪种广播(手动)
	 <intent-filter>
                <action android:name="my"></action>
     </intent-filter>
</receiver>
发送标准广播:
 		Intent intent=new Intent();
//        发送广播一般由两部分组成:1:action (指定为是那种广播); 2:data (指定广播的信息);
        intent.setAction(Intent.ACTION_ANSWER);
//        系统action
//        intent.setAction(Intent.ACTION_ANSWER);
//        自定义action
        intent.setAction("my");
        intent.putExtra("name","value");
        sendBroadcast(intent);
接收标准广播:
public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        
        //接收多个广播时,取出action
       	String action = intent.getAction();
       	
        //        取出数据
        String s=intent.getStringExtra("name");
        
        // an Intent broadcast.
        throw new UnsupportedOperationException("Not yet implemented");

    }
}

2.有序广播

Manifest配置:
//优先级设定:android:priority=“1”

		<receiver
            android:name=".Broadcast.MyOrderedReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter
                android:priority="1">
                <action android:name="my" />
            </intent-filter>
        </receiver>
        <receiver
            android:name=".Broadcast.MyOrderedReceiver2"
            android:enabled="true"
            android:exported="true">
            <intent-filter
                android:priority="2">
                <action android:name="my" />
            </intent-filter>
        </receiver>
        
发送有序广播
//        有序广播发送
//        new MyOrderedResultReceiver()最终的广播接收者,可以查询发送过程中的广播修改情况
//        无需manifest配置
        sendOrderedBroadcast(intent,null,new MyOrderedResultReceiver(),null,1,"initialData",null);
接收无序广播
//		取出数据
		 String s=getResultData();
 //      修改数据
        setResultData("setResultData");
//        终止广播,但ResultReceiver仍可以接收广播
        abortBroadcast();

3.特殊广播

对于操作频繁的广播,Manifest注册无效,只能动态注册

//屏幕被关闭之后的广播
Intent.ACTION_SCREEN_OFF;

//屏幕被打开之后的广播
Intent.ACTION_SCREEN_ON;

//充电状态,或者电池的电量发生变化
//电池的充电状态、电荷级别改变,不能通过组建声明接收这个广播,只有通过Context.registerReceiver()注册
Intent.ACTION_BATTERY_CHANGED;

示例:

//必须全局变量,因为注销广播时需要。
    BroadcastReceiver broadcastReceiver;
//        创建filter对象
        IntentFilter filter=new IntentFilter();
//        添加action
        filter.addAction("Intent.ACTION_SCREEN_OFF");
        filter.addAction("Intent.ACTION_SCREEN_ON");
//      广播接收者
        broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

            }
        };
//        动态注册
        registerReceiver(broadcastReceiver, filter);
        

必须执行注销操作。

    @Override
    protected void onDestroy() {
//        注销注册
        unregisterReceiver(broadcastReceiver);
        super.onDestroy();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值