【Android】Broadcast

1,接收广播


android中存在两种广播,异步和同步广播,后者按接收器优先级顺序接收,可被截断。自定义接收器继承BroadcastReceiver类重写onReceive方法即可。

广播接收器有两种注册方式,一种在AdroidManifest.xml中注册(静态注册),另一种在java代码中注册(动态注册),动态注册如下所示:

public class Activity1 extends AppCompatActivity {

    private IntentFilter intentFilter;

    private NetworkChangeReceiver networkChangeReceiver;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_1);

        intentFilter = new IntentFilter("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();

        }

    }

}

第二种是在androidManifest.xml中静态注册

exported:是否允许接受本程序以外的广播
enabled:是否启用

<receiver

android:name="._广播.BootCompleteReceiver"

android:enabled="true"

android:exported="true">

<!--接收范围-->

<intent-filter>

<action android:name="com.example.broadcast.MY_BROADCAST"></action>

</intent-filter>

</receiver>

2,发送广播


如何发送广播呢?很简单,创建一个intent("可被接收的广播名")
然后调用Context的sendBroadcast(intent)或sendOrderedBroadcast(intent)方法来发送异步和同步广播。

Intent intent = new Intent("com.example.broadcast.MY_BROADCAST");

sendBroadcast(intent);

<!--接收范围-->

<intent-filter android:priority="100">

<action android:name="com.example.broadcast.MY_BROADCAST"></action>

</intent-filter>

如果发送有序广播,可设定intent-fliter的priority属性

以保证广播按priority先后级传播,如果需要截断广播,只需调用abortBroadcast()方法即可。

3,本地广播管理


为了安全问题,一些广播只能在本地应用中传播,可以通过api中的LocalBroadcastManager发送广播即可。

//发送本地广播

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(Activity1.this);

localBroadcastManager.sendBroadcast(intent);

//注册本地广播接收器

LocalReceiver localReceiver = new LocalReceiver();

localBroadcastManager.registerReceiver(localReceiver,new IntentFilter());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值