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

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地址

posted @ 2018-10-25 22:04  kyun  阅读(199)  评论(0编辑  收藏  举报