精华内容
下载资源
问答
  • 2.注册方式两种:  (1)静态注册  在AndroidManifest.xml中注册,属于全局广播,只要有广播发送,那么就可以接收到。  第一步:自定义一个Class,继承自BroadcastReceiver,重写onReceive()方法,在该方法...

    1.广播,标准广播(异步),有序广播(同步),本地广播

    2.注册方式两种:

             (1)静态注册

                     在AndroidManifest.xml中注册,属于全局的广播,只要有广播发送,那么就可以接收到。

                     第一步:自定义一个Class,继承自BroadcastReceiver,重写onReceive()方法,在该方法中执行相关的广播接收之后的操作;

                     第二步:在AndroidManifest.xml中注册广播,设置相关的参数,权限;

             (2)动态注册

                     在某个Activity的onResume()方法中注册,在onPause()方法中注销。

                     第一步:自定义一个Class,继承自BroadcastReceiver,重写onReceive()方法,在该方法中执行相关的广播接收之后的操作;

                     第二步:在onResume()方法中:初始化IntentFilter,加action,初始化第一步的Class,注册广播registerReciver()方法,传入相关的参数;

                     第三步:在onPause()方法中:注销广播unregisterReceiver()方法,防止内存泄漏;

                     第四步:如果有权限,在AndroidManifest.xml中添加权限;

    3.本地广播,是考虑到安全性和高效性,在应用内注册广播。所涉及的方法换成是调用LocalBroadcastManager的相关方法;

    4.有序广播,涉及的方法是sandOrderBroadcast(),用Android:priority设置接收广播的优先级,拦截的方法是abortBroadcast();

    5.推荐文章:http://www.jianshu.com/p/ca3d87a4cdf3

    展开全文
  • Android全局大喇叭——发送自定义...前面我们也介绍过广播主要分为两种类型:标准广播和有序广播,在下面我们就将通过实践的方式来讲解一下这两种广播的具体区别。 先前准备工作—接收器配置所有的广播发送

    Android的全局大喇叭——发送自定义广播




    导读:发送自定义广播

    上一篇文章(详解安卓中的广播机制)中我已经简介了安卓开发中的广播接收器机制,我们可以通过广播接收器来接收系统广播,接下来我们就要学习一下如何在应用程序中发送自定义的广播。前面我们也介绍过广播主要分为两种类型:标准广播和有序广播,在下面我们就将通过实践的方式来讲解一下这两种广播的具体区别。





    先前准备工作—接收器的配置

    所有的广播要发送,就必须要一个接收器嘛!首先我们使用android studio 提供的快捷功能新建一个广播接收器,在这里我们命名为MyBroadcastReceiver代码如下所示:

    package com.example.gq.broadcasttest;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            Toast.makeText(context,"receives in MyBroadcasrReceiver",Toast.LENGTH_SHORT).show();
            //在这里我们还是只用最简单的方法来一个文本提示!
        }
    }

    根上章所说的一样简单,我们在静态注册广播还需要在Androidmanifest.xml中对编译器自动生成的代码加上接收器的指令和提供相应需要的权限。
    下面是在Androidmanifest.xml中提升权限的代码:

        <!-- 下面是有关静态广播的系统网络权限声明 -->
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    下面是在接收器的侯活动代码:

            <receiver
                android:name=".MyBroadcastReceiver"
                android:enabled="true"
                android:exported="true"></receiver>
            <intent-filter>
                <action android:name="com.example.broadcasttest.MY_BROADCAST"/>
                <!--添加广播接收器需要接收的指令-->
            </intent-filter>
           </receiver>

    由于上一篇文章已经说得比较详细,这里就不再赘述!





    (一)发送标准广播



    我们先在布局文件中定义一个按钮
    .xml:

        <Button
            android:id="@+id/button"
            android:layout_width="368dp"
            android:layout_height="wrap_content"
            android:text="Send Broadcast"
            tools:layout_editor_absoluteY="0dp"
            tools:layout_editor_absoluteX="8dp" />
        <!--大致就是这个咯!-->

    再在activity_main.xml中添加点击事件:

            Button button=(Button)findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    Intent intent =new
                            Intent("com.example.broadcasttest.MY_BROADCAST");
                    /*
                    首先我们先构造出一个Intent对象,并把要发送的广播的值传入,然后调用Context的
                    sendBroadcasr()方法将广播发送出去,这样所有监听com,example.broadcasttest.MY_BROADCAST
                    这条广播的广播接收器就会收到消息,此时发送出去的广播就是一条标准广播。
                    就简单而言,就是利用Intent的垮活动数据传递特性,进行广播指令的传递。
                     */
                    sendBroadcast(intent);
                }
            });






    (二)发送有序广播

    小伙伴们注意了!这里还是先基于建立广播接收器的条件下,开始的!!!
    这里。。。
    我为了偷个懒,所以还是利上面讲的广播接收器。请大家见谅!嘿嘿


    这里需要改变的就一段:(按钮点击事件中)

            Button button=(Button)findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v){
                    Intent intent =new
                            Intent("com.example.broadcasttest.MY_BROADCAST");
                    /*
                    首先我们先构造出一个Intent对象,并把要发送的广播的值传入,然后调用Context的
                    sendBroadcasr()方法将广播发送出去,这样所有监听com,example.broadcasttest.MY_BROADCAST
                    这条广播的广播接收器就会收到消息。
                    就简单而言,就是利用Intent的垮活动数据传递特性,进行广播指令的传递。
                     */
                    sendOrderedBroadcast(intent,null);
                    /*这里就是上面这一段发生改变,我们在这里
                    将sendBroadcast()方法改成sendOrderedBroadcast()方法
                    并接收两个参数。
                    第一个参数任然是Intent.
                    第二个参数是于权限有关的字符串,这里传入null就行了。
                    */
                }
            });



    是不是觉得很迷?
    说好的有序广播的顺序呢?
    完全没有?
    这是什么操作?
    别急,马上就来,有关有序广播的顺序问题.
    在广播接收器由Android Studio自动生成的同时,也会同时在Androidmanifest.xml文件中生成广播接收器的活动,接下来我们的有序,就需要在接收器中添加:

            <receiver
                android:name=".BootCompleteReceiver"
                android:enabled="true"
                android:exported="true">
    
                <!-- 上面两行是创建广播文件的时候,自己选择自动生成的两个属性! -->
                <!-- 第一行:enabled属性是表示是否启用这个广播接收器 -->
                <!-- 第二行:exported属性是表示是否允许这个广播接收器接收本程序以外的广播 -->
                <intent-filter android:priority="100">
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <!--上面这段android:priority="100"属性就是给广播设置了优先级,比较是优先级较高的接收器会先收到广播,其满足1>2>3>***>无设置,所以这里优先级大于前面的未设置优先级的广播接收器-->
                    <!-- 由于android系统启动完成后会发出一条值为:android.intent.action.BOOT_COMPLETED的广播 -->
                    <!-- 因此我们在<ibtebt-filter>标签里添加了相应的action -->
                </intent-filter>
            </receiver>



    设置优先级后,我们怎么确保广播是否继续传递?
    在最初我们创建的广播接收器的类中我们只需用在最后添加一段代码就可以确保广播信号不好继续传递下去:

    package com.example.gq.broadcasttest;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            Toast.makeText(context,"receives in MyBroadcasrReceiver",Toast.LENGTH_SHORT).show();
            //在这里我们还是只用最简单的方法来一个文本提示!
            abortBroadcast();
            /*在onReceive()方法中调用了abortBroadcast()方
            法,就表示将这条广播截断,能接收到广播的就只
            有优先级最高的,其他广播接收器就无法接收到广播信号
            */
        }
    }
    

    还是给大家推荐一首歌,一个女孩子推荐给我的。。。
    九张机 叶炫清
    那个女孩问我这首歌怎么样。。。
    貌似听过,也就一句还好吧。

    展开全文
  • 安卓的广播事件分为两种,一种是系统的广播;一种是自定义的广播。 系统的广播: 手机在收到短信,接到电话,系统都会向所有应用发送广播,如果程序中声明了获取短信等先关权限就能获取这些广播,从而获取...

    安卓中的广播事件分为两种,一种是系统的广播;一种是自定义的广播。


    系统的广播:
    手机在收到短信,接到电话,系统都会向所有应用发送广播,如果程序中声明了获取短信等先关权限就能获取这些广播,从而获取自己想要的相关信息,如短信内容等。
    自定义的广播:
    可以在程序中发送广播,目前我了解的只能是本程序来接收这些广播。


    下面说下接收广播的方式。要想接收广播,需要先注册广播接收器,一种静态的,一种动态的。


    静态的需要在AndriodManifest.xml中的application标签下加入如下代码:
            <!--短信广播接收者  -->
       <receiver android:name="com.ldkj_bank.www.util.SmsReciver" >
                <intent-filter android:priority="999">
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>
       </receiver>

    这段代码的意思是SmsReciver这个类可以接收短信的广播。当然,这个类必须继承自BroadcastReceiver

    动态的需要创建专门的广播接收类,此类继承于BroadcastReceiver

        //=========================广播接收器==========================================================
        private class MyBroadcastRecv extends BroadcastReceiver{
    
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			Bundle bundle = intent.getExtras();
    			SmsMessage msg = null;
    			if (null != bundle) {
    				Object[] smsObj = (Object[]) bundle.get("pdus");
    				for (Object object : smsObj) {
    					msg = SmsMessage.createFromPdu((byte[]) object);
    	    		Date date = new Date(msg.getTimestampMillis());//时间
    	                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	                String receiveTime = format.format(date);
    					System.out.println("number:" + msg.getOriginatingAddress()
    					+ "   body:" + msg.getDisplayMessageBody() + "  time:"
    							+ msg.getTimestampMillis());
    					
    					//在这里写自己的逻辑
    					if (msg.getOriginatingAddress().equals("1069020510184195")) {
    			            //这里我是要获取自己短信服务号码中的验证码~~  
    			            Pattern pattern = Pattern.compile("[0-9]{6}");  
    			            Matcher matcher = pattern.matcher(msg.getDisplayMessageBody());  
    			            if (matcher.find()) {  
    			                String res = matcher.group().substring(0, 6);  
    			                final EditText numberText = (EditText) numberDialog.findViewById(R.id.pay_pwd);
    			                numberText.setText(res);  
    			            }  
    						
    					}
    					
    				}
    			}
    			
    		}
        	
        	
        }
    广播接收器设置好了,就要告诉它需要接收什么类型的广播了,就是绑定接收广播的类型.可以参考下边的函数:

    	//注册广播接收器
    	private void regBroadcastReceiver(){
    		broadcastRecv = new MyBroadcastRecv();
    		IntentFilter filter = new IntentFilter();
    		filter.addAction("android.provider.Telephony.SMS_RECEIVED");
    ;
    		registerReceiver(broadcastRecv, filter);
    	}
    这段程序的意思就是broadcastRecv可以接收短信的广播。

    接收系统的广播还要在AndriodManifest.xml文件中声明的权限。例如上边所说的获取短信的权限。要加入如下代码:

        <!--获取读取短信的权限  -->
         <uses-permission android:name="android.permission.RECEIVE_SMS" >
        </uses-permission>
        <uses-permission android:name="android.permission.READ_SMS" >
        </uses-permission>


    以上所说的均为获取系统的广播,那么如果我在程序中,想要自己想要发送一个广播,然后让其他的程序接收怎么办呢?

    下边是截取的发送广播的一段代码:

    	//发送用户更新广播
    	private void sendPersonHasChangedBroadcast(){
    		Intent intent = new Intent();
    		intent.setAction(Constant.personHasChangedAction);
    		sendBroadcast(intent);
    	}
    Constant,personHasChangeAction是一个自定义字符串,便于接收端接收区分是什么广播,这样就发出去了。接收还和上边的接收方式类似。通过广播接收器类的onReceive方法接收。intent.getAction()获取字符串来区分,类如如下代码:

    	//广播接收器处理类
    	private class ServiceBroadcastReceiver extends BroadcastReceiver{
    		@Override
    		public void onReceive(Context context, Intent intent) {
    			if(intent.getAction().equals(Constant.WIFIACTION) || intent.getAction().equals(Constant.ETHACTION)){
    				new CheckNetConnectivity().start();
    			}else if(intent.getAction().equals(Constant.updateMyInformationAction)){
    				getMyInfomation();
    				comBridge.joinOrganization();
    			}else if(intent.getAction().equals(Constant.refuseReceiveFileAction)){
    				comBridge.refuseReceiveFile();
    			}else if(intent.getAction().equals(Constant.imAliveNow)){
    				
    			}
    		}
    	}

    那么什么时候用自定义广播合适呢?

    一般是用于这个程序有service类在界面下来接收、处理请求,或者做其他的事情。需要刷新界面的时候。就发送广播。如果service收到一个消息,需要在界面中显示出来,就用到了。



    展开全文
  • 广播的两种发送方式 广播接受者 广播接受者的注册过程 广播注册过程时序图 广播的两种注册方式 前言——手机的“小动作” 如电量低到一定程度会有低电量提醒,插入电源线时炫酷的动画,充满电时又会显示电量...

    目录

    前言——手机的“小动作”

    什么是广播?

    有了服务为什么还需要广播?

    常见的系统action

    广播有哪些成员?

    广播发送者

    广播的发送过程

    广播发送过程时序图

    广播的两种发送方式

    广播接受者

    广播接受者的注册过程

    广播注册过程时序图

    广播的两种注册方式


    前言——手机的“小动作”

        如电量低到一定程度会有低电量提醒,插入电源线时炫酷的动画,充满电时又会显示电量已充满,以及当手机开机时显示“欢迎使用中国移动/联通/电信”提醒,关闭wifi、数据时会弹出“网络不可用”等,这些手机的“小动作”都需要系统或应用做出一些反应来让用户感知手机状态的变化,而广播就充当了这个大喇叭的角色,来告知系统和应用是时候做出反应了。

    什么是广播?

          作为Android系统的四大组件之一,广播(Broadcast)是一种在组件之间进行消息传递的方式。这些组件可以是在同一个进程或不同进程中,所以广播机制可以让应用与应用间传递消息,也可以让应用接收系统消息。它利用了观察者模式,基于消息发布/订阅事件模型,它没有用户界面,但可以启动Service或Activity,所以它可以对感兴趣的外部事件(电话呼入、网络连接等)来接收并做出响应。

    有了服务为什么还需要广播?

      广播机制类似服务的Binder机制都是进程间通信,同样也是基于Binder机制的基础上实现的,但对于Binder来说,在Client组件在和Service组件通信之前,必须要先获得它的一个代理对象,即Client组件事先要知道Service组件的存在。然而在广播机制中,广播发送者实先不需要知道广播接收者的存在,这样就可以降低广播发送者和广播接收者之间的耦合度,从而提高系统的可扩展性和可维护性。

    常见的系统action

    ACTION_TIME_CHANGED 系统时间被改变
    ACTION_DATE_CHANGED 系统日期被改变
     ACTION_TIMEZONE_CHANGED 系统时区被改变
    ACTION_BOOT_COMPLETED  系统启动完成
     ACTION_BATTERY_CHANGED 电池电量改变
    ACTION_SHUTDOWN 系统被关闭
    ACTION_BATTRY_LOW 电池电量低

    广播有哪些成员?

        一个事件的完整周期必须有一个传达者,即广播发送者它将手机状态以广播的形式发送出去,这时候就需要一个做出反应的接收者,即广播接收器它对于接收到的广播做出一些应有的反应,如插入电源线时它接收到电源插入的广播就让系统弹出充电效果和此时电量值。

    广播发送者

    广播发送者负责发送消息,而广播接收者需要先订阅消息,然后才能收到消息,而广播发送者是Android的两个组件,即Activity和Service组件,它们被赋予了广播发送的能力。

    广播的发送过程

    1.  广播的发送者将一个特定类型的广播发送给ActivityManagerService,(如下文章中用AMS代替)。
    2. AMS接收到一个广播之后,首先找到与这个广播对应的接收者,这个“找”就是由于应用注册了这个广播,如在AndroidManifest.xml中的静态注册,或在代码中声明对象后使用Context的registerReceiver动态注册,找到后将他们添加到一个广播调度队列中,最后由AMS所运行在的线程的消息队列发送一个类型为BROADCAST_INTENT_MSG的消息,这时候对于广播的发送者来说一个广播就发送完成了。
    3. 当发送到AMS在的线程消息队列中的BROADCAST_INTENT_MSG消息被处理时,AMS就会从广播调度队列中找到需要接收这个广播的广播接收者,并且将对应的广播发送给他们所运行在的应用程序进程。
    4. 广播接收这所运行在的应用程序接收到AMS发送过来的广播之后,并不是直接将接收到的广播分发给广播接收者来处理,而是将接收到的广播封装成一个消息,并且发送到主线程的消息队列中,当这个消息被处理时,应用程序进程才会将它所描述的广播发给相应的广播接收者。

    广播发送过程时序图

    广播的两种发送方式

    •  无序广播(标准广播Nomal braodcasts)是一种完全异步执行的广播,使用sendBroadcast(Intent)或sendBroadcast(Intent,String),所有的接收者几乎同一时间接收事件,没有顺序可言,这种广播的效率较高,当然也不可以被拦截或被修改。其工作流程图如下。

    代码使用如下:

    定义一个事件,发送无序广播

    Intent intent=new Intene();
    //设置任意String的动作,可自定义为了接收者方便接收
    intent.setAction("com.example.broadcast");
    sendBroadcast(intent)

    定义一个广播接收者来接收这个广播事件

    public class MyReceiver extends BroadcastReceiver{
     @Override
     public void onReceive(Context context,Intent intent){
         //do something
         Toast.makeText(context,"收到广播",Toast.LENGTH_SHORT).show();
     }
    }

    在Manifest.xml中配置该接收者

    <receiver android:name".MyReceiver">
       <!--动作设置为发送的广播动作-->
       <intent-filter>
           <action android:name="com.example.broadcast"/>
       </intent-filter>
    </receiver>  

    运行结果:Toast打印出“收到广播” 

    • 有序广播(Ordered broadcasts)则是一种同步执行的广播,使用sendOrderedBroadcast(Intent,String,BroadCastReceiver,Handler,int,String,Bundle),在广播发出后只有一个广播接收器能够收到这条广播,当这个广播逻辑执行完毕后按照优先级,一级一级的向下传递,接收者可以修改广播数据,也可以终止广播事件,其工作流程图如下

     代码使用如下:

    定义一个事件,发送一个有序广播

    Intent intent = new  Intent();
    //设置intent的动作为com.example.broadcast,可以任意定义
    intent.setAction("com.example.broadcast");
    //发送无序广播
    //第一个参数:intent
    //第二个参数:String类型的接收者权限
    //第三个参数:BroadcastReceiver 指定的接收者
    //第四个参数:Handler scheduler
    //第五个参数:int 此次广播的标记 
    //第六个参数:String 初始数据
    //第七个参数:Bundle 往Intent中添加的额外数据
    sendOrderedBroadcast(intent, null, null, null, "这是初始数据", );

    定义多个广播接收者,来接收这个广播事件。通过Toast的打印判断是否收到广播

    public class MyReceiver1 extends BroadcastReceiver {
        public MyReceiver1() {
        }
        @Override
        public void onReceive(Context context, Intent intent) {
            //获取广播中的数据(即得到 "这是初始数据" 字符串)
            String message = getResultData();
            Toast.makeText(context ,message ,Toast.LENGTH_SHORT).show();
            //修改数据
            setResultData("这是修改后的数据");
        }
    }
    public class MyReceiver2 extends BroadcastReceiver {
        public MyReceiver2() {
        }
        @Override
        public void onReceive(Context context, Intent intent) {
            String message = getResultData();
            Toast.makeText(context ,message ,Toast.LENGTH_SHORT).show();
            //终止广播
            abortBroadcast();
        }
    }
    public class MyReceiver3 extends BroadcastReceiver {
        public MyReceiver3() {
        }
        @Override
        public void onReceive(Context context, Intent intent) {
            String message = getResultData();
            Toast.makeText(context ,message ,Toast.LENGTH_SHORT).show();
        }
    }

    在Manifest.xml中配置该接收者。并设置优先级:MyReceiver1>MyReceiver2>MyReceiver3。 

    <!-- 优先级相等的话,写在前面的receiver的优先级大于后面的 -->
    <receiver
                android:name=".MyReceiver1" >
                <!-- 定义广播的优先级 -->
                <intent-filter android:priority="1000">                
                    <!-- 动作设置为发送的广播动作 -->
                    <action android:name="com.example.broadcast"/>
                </intent-filter>
    </receiver>
    <receiver 
                   android:name=".MyReceiver2" >
                       <!-- 定义广播的优先级 -->
                       <intent-filter  android:priority="0">
                       <!-- 动作设置为发送的广播动作 -->
                       <action android:name="com.example.broadcast"/>
                </intent-filter>
    </receiver>
    <receiver 
                   android:name=".MyReceiver3" >
                       <!-- 定义广播的优先级 -->
                       <intent-filter  android:priority="-1000">
                       <!-- 动作设置为发送的广播动作 -->
                       <action android:name="com.example.broadcast"/>
                </intent-filter>
    </receiver>
    

    运行结果:MyReceiver1得到广播数据后打印“这是初始数据”,MyReceiver2接收到广播数据打印“这是修改后的数据”,MyReceiver3没有打印。 

    广播接受者

      接收到广播后的业务逻辑,直接另写一个新的类继承BroadcastReceiver随后重写onReceive(context,intent)方法,在其中执行接收到广播后所要执行的逻辑,要想接受到广播,就要注册这个广播接收者

    
    public class MyBroadCastReceiver extends BroadcastReceiver{  
       @Override  
       public void onReceive(Context context, Intent intent)   
       {    //doSometing
           Toast.makeText(context,"手机开机了",Toast.LENGTH_LONG).show();
           //还可以从Intent中获取数据、还可以调用BroadcastReceiver的getResultData()获取数据
        }   
    } 

    广播接受者的注册过程

      前面提到,在Android系统的广播机制中,AMS扮演着注册中心的角色,用来注册广播接收者以及转发广播。因此,Android应用程序注册广播接收者的过程实际上就是把一个广播接收者注册到AMS中。

    广播注册过程时序图

    广播的两种注册方式

    •  代码中的动态注册

    1. 实例化自定义的广播接收者
    2. 实例化意图过滤器,并设置要过滤的广播类型(如,我们接收开机时系统发出的广播)
    3. 使用Context的registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)方法注册广播
    //new出上边定义好的BroadcastReceiver
    MyBroadCastReceiver mBroadCastReceiver = new MyBroadCastReceiver();
    //实例化过滤器并设置要过滤的广播  
    IntentFilter intentFilter = new IntentFilter("android.intent.action.MAIN");
    //注册广播   
    myContext.registerReceiver(mBroadCastReceiver,intentFilter, 
                 "android.permission.RECEIVE_BOOT_COMPLETED", null);  
    •   在AndroidManifest.xml的静态注册

    直接在AndroidManifest.xml文件中<application>节点中配置广播接收者

    <receiver android:name=".MyBroadCastReceiver">  
                <!-- android:priority属性是设置此接收者的优先级(从-1000到1000) -->
                <intent-filter android:priority="20">
                <actionandroid:name="android.intent.action.MAIN"/>  
                </intent-filter>  
    </receiver>  

    还要在<applixation>同级的位置配置可能使用到的权限

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED">
    </uses-permission>

       以上就是广播的使用介绍了,以上代码在广播接收器的onReceive()方法中都只是简单使用了Toast提示了一段文本信息,当真正在项目中使用它时可编写其他逻辑,但是不能在其中添加过多的逻辑或进行任何耗时操作,因为广播接收器时不允许开启线程的,当onReceive()方法运行了较长时间而没有结束时,程序就会报错,因此广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知或启动一个服务等。 

    此内容均来自本小编公众号,此文章可回复“广播”搜索,主要介绍Java、Android方面知识,欢迎关注一起探讨技术问题

                                                                                            IT女小白的成长史

                                                                                     IT女小白成长史

    展开全文
  • 安卓的广播使用

    2016-05-11 18:53:36
    接收广播者需要注册能接收哪种广播,注册广播两种方式,一、是在 清单文件中进行静态注册,二、是在程序中直接注册,使用registerBroadcast()方法。这里涉及到广播接收优先级问题,单纯设置优先级仍然 分...
  • 是指安卓四大组件——Receiver刚开始接触广播,以为是FM,后来发现并不是哈哈哈广播的内容不是很多,本文主要回顾两种注册方式在不同版本安卓系统上兼容问题1静态注册先介绍一下广播的静态注册:案例:监听开机...
  • 广播

    2018-03-26 17:51:41
    1.什么是广播 安卓的广播机制就是说,在一些操作完成后,会发送广播,对应...两种广播注册方式:静态广播,动态广播; 发出广播的代码: 建议,每一段接收方都单独建一个app public class MainActivity e...
  • 根据各个博客所说原因,是安卓7之后设备对此种方式不兼容。 提供个解决方法 解决(一) 参考android第一行代码(第三版)。应该设置一下包名 //对按钮设置监听事件 b.setOnClickListener((view)->{ Intent...
  • 安卓中,广播的接收有动态注册和静态注册两种方式,这篇博客沿着动态广播的注册、发送和接收三条路线开展探究。 动态广播的注册 首先,先整理一波动态注册鸟瞰图 从图中可以看到 1)代码中调用...
  • 安卓小案例收集三

    千次阅读 2016-05-30 22:43:25
    收集三 对话框 多线程下载断点续传 XUtils的使用 Activity跳转 Intent跳转并携带数据IntentBundle携带 Activity销毁时传递数据 ...服务的两种启动方式 中间人服务 音乐播放 通过服务手动启动广播接受者收集三对话
  • 黑马安卓52期视频教程

    热门讨论 2015-06-24 22:15:48
    01_服务的两种启动方式及其生命周期 02_通过绑定服务调用服务里的方法 03_把服务里的方法抽取成接口 04_音乐播放器 05_使用代码注册广播接收者 06_启动远程服务 07_访问远程服务的方法 08_AIDL步骤回顾 09_用aidl...
  • Intent是安卓程序中各组件之间进行交互重要方式,既可以指明当前组件要执行动作,还可以在不同组件之间传递数据。 Intent一般可以被用于启动活动、启动服务以及发送广播等场景。 Intent可以分为两种: 1、...
  • Intent用法相信大家已经比较熟悉了,我们可以借助它来启动活动,发送广播,启动服务等。调用IntentputExtra()方法来添加要传递数据,之后在其他Activity类中就可以获取...使用Intent来传递对象通常有两种实现方式
  • 根据各个博客所说原因,是安卓7之后设备对此种方式不兼容。 问题1:点击发送标准广播,没有"received in MyBroadcastReceiver"消息 书上P179 MainActivity中onClick函数代码为: Intent intent=new Intent(...
  • Intent ...Intent大致可以分为两种:显式Intent和隐式Intent,我们先来看一下显式Intent如何使用。 首先我创建了2个活动. 1.FirstActivity(第一个活动) package activitytest.example.administrator.ac
  • |--监听之单击监听的两种定义 |--监听之双击监听 |--监听之电话状态监听 |--监听之触摸监听 |--短信之根据id删除及查询短信 |--短信发送小demo |--短信的截取 |--系统之SD卡清理 |--系统之获取所有开机启动应用 |--...
  • 它代表着一全新教学方式,利用一套软件,在现有电脑网络设备上,实现教师机对学生机的广播、监控、屏幕录制、屏幕回放、语音教学等操作来统一地进行管理与监控,辅助学生完成电脑软件学习、使用。...
  • 它代表着一全新教学方式,利用一套软件,在现有电脑网络设备上,实现教师机对学生机的广播、监控、屏幕录制、屏幕回放、语音教学等操作来统一地进行管理与监控,辅助学生完成电脑软件学习、使用。...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    在随后的两个月内,注册扩展至波士顿地区的其他高校(如麻省理工学院)以及斯坦福大学、纽约大学、西北大学和所有的长春藤名校。第二年,很多其他学校也被邀请加入进来。最终,在全球范围内有一个大学后缀电子邮箱的...
  • 支持两种数据源,一种是串口和网络通过协议采集设备数据,一种是数据库采集。数据库采集模式可以作为通用系统使用。 自带设备模拟工具,支持16个设备数据模拟,同时还带数据库数据模拟,以便在没有设备时候测试...
  • 先准备一台(不要台)开启了开发者选项的安卓手机,连接上电脑,确保执行adb devices可以看到连接上设备。 运行pip3 install -U uiautomator2 安装uiautomator2 运行python3 -m uiautomator2 init安装包含...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

安卓广播发送的两种方式