Android那点事

Android广播

2017-05-06  本文已影响73人  NickelFox

一. 广播

1. 广播是什么?

广播(Broadcast)机制用于进程/线程间通信,因此在我们应用程序内发出的广播,其他的应用程序应该也是可以收到的。

2. 广播用到的场景

3. 广播类型

二. 广播接收器(BroadcastReceiver)

1. 什么是广播接收器?

广播接收器是Andoird中用来接收广播(系统发送的或者其他程序发送的)的组件,是Android的四大组件之一

2. 广播接收器类型

3. 广播接收器的用法(以下代码均为接收系统广播)

PS:有时候接收系统广播的时候可能会需要权限,此时要记得声明权限

public class BootCompleteReceiver extends BroadcastReceiver {

    /*收到广播后会调用onReceive方法*/
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"Boot complete",Toast.LENGTH_LONG).show();
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
<receiver>
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
</receiver>
IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");//实例化IntentFilter并添加action
<receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
</receiver>
mNetWorkChangeReceiver = new NetWorkChangeReceiver();//实例化BroadcastReceiver
registerReceiver(mNetWorkChangeReceiver,intentFilter);//注册BroadcastReceiver
@Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mNetWorkChangeReceiver);
    }

三. 发送广播(全局广播,所有应用程序都可以接收)

1. 简介:

Android不仅允许系统发送广播,也允许应用程序发送广播。应用程序可以发送标准广播和有序广播。

2. 发送方法:

Intent intent = new Intent("com.foxnickel.broadcasttest.MY_BROADCAST");//定义内容为com.foxnickel.broadcasttest.MY_BROADCAST的广播
sendBroadcast(intent);//发送广播
Intent intent = new Intent("com.foxnickel.broadcasttest.MY_BROADCAST");//定义内容为com.foxnickel.broadcasttest.MY_BROADCAST的广播
sendOrderedBroadcast(intent,null);//发送有序广播

3. 注意

@Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"received in MyBroadcastReceiver",Toast.LENGTH_SHORT).show();
        Toast.makeText(context,intent.getStringExtra("data"),Toast.LENGTH_SHORT).show();//获取intent里的数据
    }
        <receiver
            android:name=".MyBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="100">//优先级低,后收到
                <action android:name="com.foxnickel.broadcasttest.MY_BROADCAST"/>
            </intent-filter>
        </receiver>
        <receiver
            android:name=".AnotherReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="200">//优先级高,先收到
                <action android:name="com.foxnickel.broadcasttest.MY_BROADCAST"/>
            </intent-filter>
        </receiver>

四. 本地广播(在应用内部传递的广播)

1. 本地广播的优势

2. 本地广播要注意的地方

3. 本地广播的用法

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent("com.foxnickel.broadcasttest.LOCAL_BROADCAST");
mLocalBroadcastManager.sendBroadcast(intent);//发送本地广播
class LocalReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context,"received local broadcast",Toast.LENGTH_SHORT).show();
        }
    }
        IntentFilter intentFilter = new IntentFilter("com.foxnickel.broadcasttest.LOCAL_BROADCAST");
        LocalReceiver localReceiver = new LocalReceiver();
        mLocalBroadcastManager.registerReceiver(localReceiver,intentFilter);
@Override
    protected void onDestroy() {
        super.onDestroy();
        mLocalBroadcastManager.unregisterReceiver(localReceiver);
    }  

五. 注意事项

上一篇 下一篇

猜你喜欢

热点阅读