Android 广播机制

1、动态注册广播BroadcastReceiver

    在Activity文件中动态的注册广播:

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;  //用来向广播监听器传递广播名
    private MyBroadcastReceiver myBroadcastReceiver;  //创建广播监听器对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        intentFilter=new IntentFilter();  //对象实例化
        myBroadcastReceiver=new MyBroadcastReceiver();  //对象实例化
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        //这里添加监听名为android.net.conn.CONNECTIVITY_CHANGE的广播
        registerReceiver(myBroadcastReceiver,intentFilter);//注册广播
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        unregisterReceiver(myBroadcastReceiver);//取消注册
    }

    class MyBroadcastReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent){
            //这里执行监听到广播之后的程序
            Toast.makeText(context,"监听被听到",Toast.LENGTH_SHORT).show();
        }
    }
    
}

2、静态注册广播BroadcastReceiver

    右击com.example.项目名 → New → Other → Broadcast Receiver

    Exported,是否接收本程序以外的广播

    Enabled,是否启用这个广播接收器

    创建类名为Receiver1的广播:

public class Receiver1 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //这里执行监听到广播之后的程序
    }
}

    修改AndroidManifest.xml文件

<manifest>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application>
        <receiver
            android:name=".Receiver1"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

3、自定义广播

1、创建广播接收器

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "MyReceiver被监听到", Toast.LENGTH_SHORT).show();
    }
}

2、 AndroidManifest.xml中注册,自定义广播名称

        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.broadcastreceiver2.MY_BROADCAST"/>
            </intent-filter>
        </receiver>

3、 发送广播

Intent intent=new Intent("com.example.broadcastreceiver2.MY_BROADCAST");
//指定广播名称,要与接收的广播一致
intent.setComponent(new ComponentName("com.example.broadcastreceiver2","com.example.broadcastreceiver2.MyReceiver"));
// Android 8.0及以上必须添加,参数为(接收广播类的包名,接收广播类的完整类名)
sendBroadcast(intent,null);//发送广播

4、有序广播

1、有序广播发送方式:

由sendBroadcast变为:sendOrderedBroadcast ,例:

sendOrderedBroadcast (intent,null);

2、设置广播接收器的优先级

在AndroidManifest设置:

<intent-filter android:priority="100">
      <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

3、截断有序广播

public class MyReceiver2 extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      //这里执行监听到广播之后的程序
        abortBroadcast();
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值