安卓开发学习笔记—————《第一行代码》第五章 广播机制

本文深入解析了Android中的广播机制,包括标准广播与有序广播的区别,动态与静态注册广播接收器的方法,以及如何发送标准和有序广播。同时,文章还介绍了本地广播的管理方式和广播在实践中的应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中的广播分为:标准广播(所有广播接收器几乎会在同一时刻接收到这条广播消息)和有序广播(同一时刻只有一个广播接收器能够收到这条广播消息。

 

广播接收器动态注册广播,如监听网络变化:

public class MainActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
        }
    }
}

 

静态注册

包——New——Other——Broadcast Receiver,然后在AndroidManifest.xml进行修改

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

注:Android8.0在AndroidManifest.xml文件中静态注册广播接收失效,官方对耗电量的优化,避免APP滥用广播。除了少部分的广播仍支持静态注册(如开机广播),其余的都会出现失效的情况。可通过APP的Activity中对广播接收进行动态注册。

发送标准广播

Intent intent = new Intent("com.example.broadcasttest.MY_BROADCASAT");
sendBroadcast(intent);

 

发送有序广播

sendBroadcast改成 sendOrderBroadcast(intent,null);

然后修改在AndroidManifest.xml中的intent-filter。

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

使用abortBroadcast()截止广播

 

使用本地广播

主要使用了一个LocalBroadcastManager来对广播进行管理,并提供了发送广播和注册接收器的方法。

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);

mLocalBroadcastManager.sendBroadcast(intent);

mLocalBroadcastManager.registerReceiver(mLocalReceiver,mIntentFilter)

 

广播实践——强制下线功能

项目名:BroadcastBestPractice

GitHub地址

转载于:https://www.cnblogs.com/kyun/p/9853249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值