广播(动、静态注册无序、有序广播)
2018-03-26 22:02
274 查看
广播定义
(1) 广播是Android四大组件之一,全称BroadcastReceiver(2) 广播分为发送方和接收方,就算没有接收方,发送方也会发送数据
(3) 广播可以实现跨多个页面的数据通信
(4) 广播可以实现跨进程间的数据通信
静态注册广播(常驻型广播)
在Androidmanifest中注册的广播(静态注册)属于常驻型广播,即使当前应用程序结束了,广播还处于监听状态,一旦有发送者发了对应的广播,其还是会被激活静态注册无序广播使用步骤
(1)新建类继承BroadcastReceiver(2)实现onReceive抽象方法【由于BroadcastReceiver是一个抽象类,定义了一个onReceive】
(3)在AndroidManifest中注册BroadcastReceiver,结构如下:
<receiver android:name=""> <intent-filter> <action android:name=""/> </intent-filter> </receiver>
(4)在有Context环境通过sendBroadcast发送广播
代码展示
step1:在布局中添加一个按钮,定义控件、绑定ID、设置监听事件step2:设置发送频道,发送广播
step3:在AndroidManifest中注册
Activity文件 //发送方 public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.main_btn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //发送广播,引号中的是频道号 Intent intent = new Intent("zhifubao"); sendBroadcast(intent); } }); } }
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"微信",Toast.LENGTH_SHORT).show(); } }
//静态注册(无序广播)在AndroidManifest中注册的代码 <receiver android:name=".MyReceiver"> <intent-filter <action android:name="zhifubao"/> </intent-filter> </receiver>
有序广播
有序广播中的“有序”是针对广播接收者而言的,指的是发送出去的广播被BroadcastReceiver按照先后循序接收。静态注册有序广播使用步骤
(1)新建类继承BroadcastReceiver(2)实现onReceive抽象方法【由于BroadcastReceiver是一个抽象类,定义了一个onReceive】
(3)在AndroidManifest中注册BroadcastReceiver,结构如下:
<receiver android:name=""> <intent-filter android:priority=""> <action android:name=""/> </intent-filter> </receiver>
(4)在有Context环境通过sendBroadcast发送广播
代码展示
//发送方代码 public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.main_btn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //发送广播,引号中的是频道号 Intent intent = new Intent("zhifubao"); sendOrderedBroadcast(intent, null);//安卓中自定义权限 } }); } }
动态注册广播(非常驻型广播)
动态注册广播是通过代码注册广播接收者的一种形式。代码注册时可以将广播接收者作为一个内部类写在Activity中,也可以重新写一个类继承自BroadCastReceiver,需要用代码注册动态注册广播会受Activity的生命周期的影响, 当Activity销毁的时候,广播就失效了。
动态注册无序广播使用步骤
(1)新建类继承BroadcastReceiver(2)实现onReceive抽象方法
(3)在代码中实例化广播类
(4)在代码中实例化IntentFilter
(5)调用IntentFilter对象的addAction方法设置频道号
(6)在有Context坏境中调用registerReceiver注册广播
(7)在有Context坏境中通过sendBroadcast发送广播
(8)在有Context坏境中调用unregisterReceiver注销广播
代码展示
//接收方代码 public class MainActivity extends AppCompatActivity { private MyReceiver myReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver=new MyReceiver(); IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("zhifubao"); //动态注册(无序)广播接收器 registerReceiver(myReceiver,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceiver); } }
动态注册有序广播
(1)新建类继承BroadcastReceiver(2)实现onReceive抽象方法
(3)在代码中实例化广播类
(4)在代码中实例化IntentFilter
(5)调用IntentFilter对象的addAction方法设置频道号
(6)调用IntentFilter对象的priority方法设置优先级
(7)在有Context坏境中调用registerReceiver注册广播
(8)在有Context坏境中通过sendBroadcast发送广播
(9) 在有Context坏境中调用unregisterReceiver注销广播
代码展示
public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private MyBroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建intentFilter对象,用于添加action intentFilter = new IntentFilter(); intentFilter.addAction("zhifubao"); //设置优先级 intentFilter.setPriority(1000); //创建MyBroadcastReceiver的对象 myBroadcastReceiver = new MyBroadcastReceiver(); //注册广播 registerReceiver(myBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //注销注册 unregisterReceiver(myBroadcastReceiver); } }
相关文章推荐
- Android中广播的使用(动态、静态注册的区别,有序无序广播的使用)
- 静态注册和动态注册 无序广播 有序广播
- Android进阶之路 - BroadcaseReceiver(自定义广播、有序广播、无序广播、广播拦截、动态注册、静态注册)的详细使用方式
- Android组件- 广播的静态动态有序无序与优先级
- Android组件- 广播的静态动态有序无序与优先级
- Android静态注册内部类广播BroadcastReceiver
- 学习小记--android静态注册广播接收器之惑--6.6
- android有序广播和无序广播的区别
- Android中不能静态注册的广播
- 有序广播、无序广播
- android有序广播和无序广播的区别
- Android静态注册的屏幕开启和屏幕关闭的广播捕捉不到的原因
- Android静态注册广播和动态注册广播的区别
- android有序广播和无序广播的区别
- 有序广播和无序广播的区别
- Android静态/动态注册广播的区别
- Android学习小记----监听电量的变化(不能静态注册的广播)
- 发送和接收无序广播或有序广播需要注意的问题
- Android有序广播和无序广播的区别