Android四大组件之BroadcastReceiver

    xiaoxiao2021-03-25  58

           BroadcastReceiver中文翻译为广播机制。那好!广播是什么?鄙人的理解是传播信息的过程叫做广播。以前学习广播的时候,老师告诉我们广播像校园里的广播一样,然后,我们就开始回想到校园时代,幻想出一幅课间操到了,学校的喇叭传出那个经久不衰温柔的女人声音,听到广播的通知同学们都到操场上做早操的场景。。。。,诶 诶 诶,,,醒来了。

           BroadcastReceiver的作用:主要是用来监听系统或者应用发出的广播信息,然后根据广播信息做相应的逻辑处理。说通俗一点其实就是一种全局监听器,要来实现系统中不同组件之间的通信,有时候也用来作为传输少量而且发送频率低的数据。再简单一点真的就像“跑龙套”,真的要逼我说这个?转存失败重新上传取消

           安卓中广播是分两类的,一个是系统广播(小伙子记得给我充电啊),一个是本地广播(自己造),其中本地广播比较重要也比其他广播复杂,我们要重点说。使用广播机制,我们需要写一个类继承BroadcastReceiver来处理广播。总的来说,这广播套路挺深的,用它之前一定要小心;怕你记不住,就让河神帮你一把吧!以后每次用广播之前,请多听河神几点的建议:

    河神:年轻的 程序员哟!你要使用系统广播呢还是使用本地广播呀?

    提示:系统广播。其实Android系统已经给我提供了很多系统的action,比如系统开始的启动、时间的改变、日期的改变、电量的变化等等

               本地广播。系统广播发出去,其他的应用程序都可以接收到,同时我们也是接受来自其他任何应用广播;这样会有安全的问题存在,要不是我们发的广播被别人收到,

                                 就是别的应用程序发的垃圾信息广播。那遇到这种咋办?莫慌,Android引入了一套本地广播机制,在这个广播机制里面,自己发的广播只能自己接受并处

                                 理,安全问题自然就少咯!

    第一种回:系统广播

           河神:年轻的 程序员哟!你要标准广播还是有序广播呀?

           提示:不管是系统广播还是本地广播它都有两种类型,标准的广播和有序的广播。标准广播的特点是完全异步执行的广播,就是说广播发出去所有的接收器同时受到广播,

                     效率高的很,缺点就是无法被截断。有序广播呢是同步执行的广播,广播发出同一时刻只有一个接收器接受到广播且处理完毕之后才会继续传递,是有先后顺序且有

                     优先级,广播从优先级高传起。缺点就是可以截获,前面的接收器接受到广播之后可以有权阻止广播继续传递下去。

           第一种A类回:标准广播

                  河神:年轻的 程序员哟!你要动态注册广播还是静态的注册广播呀?

                  提示:BroadcastReceiver和其他三大组件一样需要注册才能使用。奇怪的是BroadcastReceiver可以静态注册广播也可以静态注册广播。

                  第一种A类1回:动态注册广播

                            何神:

    package com.xhm.demo.myservice; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; /** * Created by Dell on 2017/3/11. */ public class ReceiverActivity extends Activity { private IntentFilter intentFilter; private MyBroadcastRecevier myBroadcastRecevier; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sve); Button button3=(Button) findViewById(R.id.button3); intentFilter=new IntentFilter(); intentFilter.addAction("com.example.broadcasttest. LOCAL_BROADCAST"); myBroadcastRecevier=new MyBroadcastRecevier(); registerReceiver(myBroadcastRecevier,intentFilter); } // class MyBroadcastRecevier extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "哈哈哈哈", Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver( myBroadcastRecevier); } } 使用系统广播注意一点,要在AndroidManifest.xml上声明权限

     

                  第一种A类2回:静态注册广播

                 

    class MyBroadcastRecevier extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "哈哈哈哈", Toast.LENGTH_SHORT).show(); } } 在AndroidManifest.xml注册 name:“广播action” <uses-library android:name="com.example.broadcasttest. LOCAL_BROADCAST"/>

     

                 第一种B类回:有序广播

                           河神:标准广播和有序广播的注册一样,有区别的地方是有序广播可以设置优先级,这些不打算贴出代码,只告诉在那设置优先级。在AndroidManifest.xml文件中

                                      这样写<intent-filterandroid:priority="100">

    第二种回:本地广播

     河神:自己搞去(自己发送广播、注册广播、处理广播)。顺便说下,本地广播不需要静态注册了,只需动态注册。

     

    package com.xhm.demo.myservice; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.View; import android.widget.Button; import android.widget.Toast; /** * Created by Dell on 2017/3/11. */ public class ReceiverActivity extends Activity { private Button button1,button2; private IntentFilter intentFilter; public LocalBroadcastManager localBroadcastManager; private MyBroadcastRecevier myBroadcastRecevier; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); localBroadcastManager=LocalBroadcastManager. getInstance(this);//获得实例 setContentView(R.layout.activity_sve); button1=(Button) findViewById(R.id.button); button2=(Button) findViewById(R.id.button2); Button button3=(Button) findViewById(R.id.button3); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //发送广播 Intent intent=new Intent("Android.com"); localBroadcastManager.sendBroadcast(intent); } }); //动态注册广播 intentFilter=new IntentFilter(); intentFilter.addAction("com.example.broadcasttest. LOCAL_BROADCAST"); myBroadcastRecevier=new MyBroadcastRecevier(); localBroadcastManager.registerReceiver(myBroadcastRecevier, intentFilter); } //写一个类继承BroadcastReceiver class MyBroadcastRecevier extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "hhhhhhh", Toast.LENGTH_SHORT).show(); } } //注意,动态注册需要销毁 @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver (myBroadcastRecevier); } }

     

    效果图

           写到这里才发现,有一个知识点还没说(不好意思,忙着写河神了)。讲下自己发送广播怎么发送:

     发送标准广播步骤:1.写一个类继承BroadcastReceiver来处理广播。2.动态注册还是静态自己决定(上面说了),3.第三步是关键的地方,前两步和上面的一样,在

    Activity类的onCreate

    方法中写上:

    Intent intent=new Intent("Android.com"); sendBroadcast(intent);

     

     发送有序广播步骤:和发送标准广播步骤一样,只需要改一个地方  

    ​ sendOrderedBroadcast(intent);

     

     

     

    {"appid":"1110636277","splash":"9011829155178214","banner":"9071427185570273","screen":"6061921175375235","market":{"ali":"0","baidu":"0","huawei":"0","kuan":"0","oppo":"0","qq":"0","samsung":"0","dev360":"0","vivo":"0","xiaomi":"0"}}  

    转载请注明原文地址: https://ju.6miu.com/read-40896.html

    最新回复(0)