文章标题

1.广播分为标准广播和有序广播。

标准广播:异步执行,同时接收,效率高,无法被截断。
有序广播:同步执行,同一时刻只会有一个广播接收器能接收到该广播,有先后顺序,可被截断。

2.广播注册的方式分为动态注册和静态注册。

动态注册在代码中注册。

特点:自由控制注册与注销,灵活性强,但是必须在程序启动后才能接收到广播。

静态注册在AndroidManifest.xml中注册。

特点:固定化,可以让程序在未启动的情况下收到广播。

2.1 动态注册的步骤:

①定义广播类继承BroadcastReceiver,重写onReceive()方法。

②创建IntentFilter实例,添加action。

③创建广播类实例,使用registerReceiver()方法进行注册,将广播类实例和IntentFilter实例传进去。

④在onDestroy()中取消注册,调用unregisterReceiver()方法,传入广播类实例。

⑤有必要的声明权限。

//动态注册代码示例:
public class MainActivity extends Activity{
    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.com.CONNECTIVITY_CHANGE");
        netorkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(netorkChangeReceiver,intentFilter);
    }
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }
        class NetworkChangeReceiver extends BroadcastReceiver
        {
            @Override
            public void onReceive(Context context,Intent intent)
            {
           ConnectivityManager connectionManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
      NetorkInfo networkInfo = connectionManager.getActiveNetorkInfo();
           if(networkInfo != null && netorkInfo.isAcailable())
           {
                 Toast.makeText(context,"network is available",Toast.LENGT_SHORT).show();
           }else{
                 Toast.makeText(context,"network is unavailable",Toast.LENGT_SHORT).show();
                }
           }
        }
    }

    <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE"/>

2.2,静态注册的步骤:

①,新建广播接收类继承BroadcastReceiver用来接收注册的广播。

②,在AndroidManifest.xml中注册

③,声明权限

//代码示例:
public class BootCompleteReceiver extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context,Intent intent)
    {
        Toast.makeText(context,"Boot Complete",Toast.LENGTH_LONG).show();
        //截断广播 只有有序广播才能被截断
        abortBroadcast();
    }
}

<manifest 
...
...
<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED"/>
...
...
    <receiver android:name = ".BootCompleteReceiver">
        <intent-filter   android:priority = "100">//设置广播优先级 
            <action android:name = "android.intent.action.BOOT_COMPLETED"/>
        <intent-filter>
    </receiver>
//发送广播
    Intent intent = new Intent("com.example,broadcasttest.MY_BROADCAST");
    //发送标准广播
    sendBroadcast(intent);
    //发送有序广播
    sendOrderedBroadcast(intent,null);

3.本地广播

本地广播机制发送的广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播,可以解决安全问题。

//代码示例:类似动态注册
public class MainActivity extends Activity{
    private IntentFilter intentFilter;
    private LocalReceiver localReceiver;
    private LocalBroadcastManager localBroadcastManager;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        Button button =(Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener){
            @Override
            public void onClick(View v){
                    Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
                    localBroadcastManager.sendBroadcast(intent);
                }
        });
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
        localReceiver = new localReceiver();
        localBroadcastManager.registerReceiver(localReceiver,intentFilter);

    }
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        unregisterReceiver(localReceiver);
    }
        class LocalReceiver extends BroadcastReceiver
        {
            @Override
            public void onReceive(Context context,Intent intent)
            {
                 Toast.makeText(context,"received local broadcast",Toast.LENGT_SHORT).show();
                }
           }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值