Android(安卓)-- Android的广播机制(BroadcastReceiver)
16lz
2021-01-26
播Android 使用广播这种异步机制来处理组件之间的消息传递。所谓异步就是广的发送方和接收方不需要互相等待,对广播的接受并不会影响本身的正常工作。
收发广播:
1、发送广播
在应用层,通常发送方组件需要定义一个Intent对象,用于封装要发送的信息,并指定其action属性用于匹配,然后在组件中使用所在Content的sendBroadcast()方法,将Intent发送出去。
2、接收广播
接收方再接收某一个广播时,需要该广播在被发送之前,注册一个BroadcastReceiver(广播接受者),将其action属性设置为与要接收的广播的action属性相同的值。在注册BroadCastReceiver时,Android提供两种方法。一种是在java代码中调用registerReceiver()方法动态注册。另一种是在配置文件中使用<register>标签静态注册。
下面分别通过具体的例子看两种方法的使用。
示例1:动态注册BroadcastReceiver
public class MainActivity extends Activity { private BroadcastReceiver br=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int level = intent.getIntExtra("level", 0);// level:系统所提供的得到当前电量的一个键 int scale = intent.getIntExtra("scale", 100); tv.setText(level * 100 / scale + "%"); } }; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv=(TextView) findViewById(R.id.textView1); registerReceiver(br, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); }}
示例2:静态注册BroadcastReceiver
程序入口文件:MainActivity.java:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent =new Intent(this,MyBroadcastReveiver.class); intent.putExtra("message", "Hello"); sendBroadcast(intent); }}
MyBroadcastReveiver.java
public class MyBroadcastReveiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { System.out.println(intent.getStringExtra("message")); }}
在配置文件中注册:
<receiver android:name="MyBroadcastReveiver"></receiver>
更多相关文章
- Android(安卓)View从源码的角度分析事件的注册和接收
- WebSocket实现Android客户端之间的简单通讯
- 成功的向android推送信息——android推技术!
- android DownloadManager广播事件:下载完成、通知栏点击事件
- 广播+ Service详解、通知和权限-Android基础知识整理
- Android开机广播无效问题(手机Root后)
- 第五章 全局大喇叭---详解广播机制(Broadcast Receiver )
- Android开发22——广播接收者BroadcastReceiver的原理和注册方式
- 监听Android设备网络变化 - 亲测在华为Emui8.0 以及 Android原生