Broadcast广播

1.动态注册广播

修改MainActivity中的代码

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();
        }
    }
}

动态广播一般在onCreate()中注册广播接收器,在onDestroy()中注销广播接收器。
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
unregisterReceiver(BroadcastReceiver receiver)

2.静态注册广播

静态的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用,

在 AndroidManifest.xml文件 的Application标签中加入以下代码:

 <receiver
     android:name=".BootCompleteReceiver"
     android:enabled="true"
     android:exported="true">
     <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED" />
     </intent-filter>
 </receiver>

3.发送自定义广播

1 发送标准广播
Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);
sendBroadcast(intent);

2 发送有序广播
Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);
sendOrderedBroadcast(intent);

4.有序广播

有序广播的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。

1.设定广播接收器的先后顺序
设置intent-filter标签的android:priority属性

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="100">
        <action android:name="com.example.broadcasttest.MY_BROADCAST" />
    </intent-filter>
</receiver>

2.广播接收器截断广播

调用abortBroadcast()方法即可截断广播,以阻止其继续传播,那么比此广播接收器优先级低的其他广播接收器将无法收到这个广播。

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received	in	MyBroadcastReceiver",
                Toast.LENGTH_SHORT).show();
        abortBroadcast();
    }
}

5.本地广播

前面我们发送和接收的广播全部属于系统全局广播,即发出的广播可以被其他任何应用程序接
收到,并且我们也可以接收来自于其他任何应用程序的广播。这样就很容易引起安全性的问
题,比如说我们发送的一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的
程序不停地向我们的广播接收器里发送各种垃圾广播。

LocalBroadcastManager提供了以下实例方法:
 LocalBroadcastManager.sendBroadcast(Intent)
 LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter);
 LocalBroadcastManager.unregisterReceiver(BroadcastReceiver);

实现本地广播:使用LocalBroadcastManager类提供的发送广播和注册广播接收器的方法即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验目的: 了解Android中Broadcast广播使用方法和实现原理,掌握Broadcast广播的发送和接收机制。 实验环境: Android Studio 4.1.2 实验步骤: 1.创建一个新的Android项目,取名为BroadcastDemo。 2.在AndroidManifest.xml文件中添加两个Activity,并在MainActivity的布局文件中添加一个Button按钮。 3.创建一个自定义广播接收器类MyReceiver,用于接收自定义广播。 ```java public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Toast.makeText(context, "接收到广播,数据为:" + data, Toast.LENGTH_SHORT).show(); } } ``` 4.在MainActivity中注册广播接收器。 ```java public class MainActivity extends AppCompatActivity { private MyReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); receiver = new MyReceiver(); IntentFilter filter = new IntentFilter("com.example.broadcastdemo.MY_BROADCAST"); registerReceiver(receiver, filter); Button button = findViewById(R.id.btn_send_broadcast); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.example.broadcastdemo.MY_BROADCAST"); intent.putExtra("data", "Hello, Broadcast!"); sendBroadcast(intent); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver); } } ``` 5.在Button的点击事件中发送广播。 6.运行程序,在MainActivity中点击Button按钮,发送自定义广播。 7.在MyReceiver中接收并处理广播。 实验结果: 运行程序后,点击Button按钮发送自定义广播,MyReceiver接收并处理广播,并弹出Toast提示信息。 实验总结: Broadcast广播是Android中常用的一种通信方式,通过发送和接收广播可以实现不同组件之间的通信。在实际开发中,需要根据具体的需求选择不同的广播类型和注册方式,合理使用广播可以提高应用程序的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值