精华内容
下载资源
问答
  • 动态注册广播

    千次阅读 2016-04-16 18:13:24
    广播分为有序广播(Ordered brodcasts)和无序广播(Normal broadcasts) 有序广播是一种同步执行的广播,在同一时间段,只有一个...广播接收器有两种注册方式,一种是在AndroidMainfest里面注册和代码里面注册,前者被称为

    广播分为有序广播(Ordered brodcasts)和无序广播(Normal broadcasts)

    有序广播是一种同步执行的广播,在同一时间段,只有一个广播发出,只有等这个广播执行完,才会发向下一个广播,这种广播可以截断

    无序广播时默认广播,是一种异步执行的操作,广播发出后,无法截断。


    广播接收器有两种注册方式,一种是在AndroidMainfest里面注册和代码里面注册,前者被称为静态注册,后者成为动态注册

    那么如何创建一个广播接收器呢?其实只需要创建一个类,然后继承Broadcast Receive然后重写onReceive()方法就可以啦,当有广播到来时,onReceive()方法会自动调用


    动态注册广播:

    一:创建一个IntentFilter对象。

    二:使用IntentFilter对象的setAction方法添加一个监听对象(intentFilter.setAction("android.net.conn.CONNECTIVITY_CHANGE"));

    三:创建一个类,继承BroadcastReceiver类,实现里面的Onreceive方法();在Onreceive方法里面通过getSystemService(Context.CONNECTIVITY_SERVICE);获取到ConnectivityManager对象;调用ConnectivityManager里面的getActiveNetworkInfo()方法获取到NetWorkInfo对象,判断netWorkInfo对象是否为非空&&info.isAvailable()

    那么为有网络,反之为没有网络。

    四:使用registerReceiver(Broadcastreceiver,intentFilter)实现这个广播接收

    五:在onDestroy里面使用unregisterReceiver结束当前广播(unregisterReceiver)

    六:在清单文件中加入android.permission.ACCESS_NETWORK_STATE权限,用于查询是否有网络

    代码:

    public class MainActivity extends Activity {
     private IntentFilter intentFilter;
     Broadcasts broadcast;
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            intentFilter = new IntentFilter();
    //      监听网络变化
            intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
            broadcast = new Broadcasts();
    //      注册广播
            registerReceiver(broadcast, intentFilter);
        }
     protected void onDestroy() {
      super.onDestroy();
      unregisterReceiver(broadcast);
     }
     class Broadcasts extends BroadcastReceiver
     {
      public void onReceive(Context arg0, Intent arg1) {
       ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
       NetworkInfo info = manager.getActiveNetworkInfo();
       if(info !=null && info.isAvailable())
       {
        Toast.makeText(MainActivity.this, "有网络", 0).show();
       }
       else
       {
        Toast.makeText(MainActivity.this, "木有网络", 0).show();
       }
      }
     }
    }


     



     

    展开全文
  • Android 动态注册广播

    万次阅读 2018-12-06 10:33:39
    Android动态注册广播分为四个步骤 1、动态注册广播 2、发送广播 3、接收广播 4、销毁广播   1、动态注册广播 动态注册广播一般在 onResume() 方法中,写法如下  //注册动态广播,在 onResume()注册,在...

    Android动态注册广播分为四个步骤

    1、动态注册广播

    2、发送广播

    3、接收广播

    4、销毁广播

     

    1、动态注册广播

    动态注册广播一般在 onResume() 方法中,写法如下

        //注册动态广播,在 onResume()注册,在 onPause()中注销
        private LocatiopnBroadcast locatiopnBroadcast;
        public static final String BROADCAST_ACTION_DISC = "包名.LocatiopnBroadcast";
        @Override
        protected void onResume() {
            super.onResume();
            // 1. 实例化BroadcastReceiver子类 &  IntentFilter
            locatiopnBroadcast = new LocatiopnBroadcast();
            IntentFilter intentFilter = new IntentFilter();
            // 2. 设置接收广播的类型
            intentFilter.addAction(BROADCAST_ACTION_DISC);// 只有持有相同的action的接受者才能接收此广播
            // 3. 动态注册:调用Context的registerReceiver()方法
            registerReceiver(locatiopnBroadcast, intentFilter);
        }

     

    2、发送广播

        Intent intent = new Intent();
        //BROADCAST_ACTION_DISC,用于标识接收
        intent.setAction(BROADCAST_ACTION_DISC);
        //发送广播
        sendBroadcast(intent);

    3、接收广播

        //广播接收者
        public class LocatiopnBroadcast extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                //收到广播后的操作
            }
        }

    4、销毁广播

    需要在 onPause() 方法中销毁广播,否则有内存泄露的危险

        @Override
        protected void onPause() {
            super.onPause();
            //销毁在onResume()方法中的广播
            unregisterReceiver(locatiopnBroadcast);
        }

     

    展开全文
  • 我来记录一下动态注册广播的简单用法 一、自定义一个广播+接收广播 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent)...

    android 开发中,广播是经常会用到的
    我来记录一下动态注册广播的简单用法

    一、自定义一个广播+接收广播
        public class MyBroadcastReceiver extends BroadcastReceiver {
            @Override
            public void onReceive(Context context, Intent intent) {
                String msg = intent.getStringExtra("message");
                if (msg.equals("pay")) {
                    Toast.makeText(MainActivity.this, "收到广播", Toast.LENGTH_SHORT).show();
                }
            }
        }
        MyBroadcastReceiver 是我自定义的一个广播类,它可以是内部类也可以是外部类,继承 BroadcastReceiver
        onReceive方法里写的就是收到广播之后的操作
        同时可以获取发送广播时传递的参数 intent.getStringExtra("message");

    二、动态注册广播
        //广播
        private MyBroadcastReceiver receiver;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            receiver = new MyBroadcastReceiver();
            // 动态注册广播接受者
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("wechat.pay.Broadcast");//要接收的广播
            registerReceiver(receiver, intentFilter);//注册接收者
        }
        通过 registerReceiver() 方法,传入MyBroadcastReceiver和IntentFilter,动态注册一个广播
        MyBroadcastReceiver 就是上面自定义的广播类
        IntentFilter 设置了一个“暗号”,用于区分不同的广播

     

    三、发送广播
        Intent intent=new Intent("wechat.pay.Broadcast");
        intent.putExtra("message","pay");
        sendBroadcast(intent);
        通过 sendBroadcast()方法发送广播
        Intent 设置了一个“暗号”,用于区分不同的广播,与动态注册的“暗号”相对应
        同时,Intent也可以传递参数 intent.putExtra("message","pay"); 

    四、销毁广播
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(receiver);
        }
        在哪个Activity或Fragment里注册的广播,就在哪里销毁
        不销毁的话可能会造成内存泄漏

     

    展开全文
  • 动态注册广播接收器

    2015-12-08 20:46:40
    如何动态注册广播接收器,一个简单的实例
    1. public class MainActivity extends Activity {
    2. private IntentFilter intentF;
    3. private NetworkChangeReceiver networkCR;


    4. @Override
    5. protected void onCreate(Bundle savedInstanceState) {
    6. super.onCreate(savedInstanceState);
    7. setContentView(R.layout.activity_main);
    8. intentF = new IntentFilter();
    9. //广播接收器想要监听什么广播就添加什么样的action
    10. //android.net.conn.CONNECTIVITY_CHANGE是网络状态发生变化时系统发出的值
    11. intentF.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    12. networkCR = new NetworkChangeReceiver();
    13. //使用registerReceiver()方法注册,传入两个实例,这样NetworkChangeReceiver就会收到
    14. //所有值为android.net.conn.CONNECTIVITY_CHANGE的广播,也就实现了网络变化的监听
    15. registerReceiver(networkCR,intentF);
    16. }


    17. //动态注册的广播接收器不要忘记取消注册哦
    18. @Override
    19. protected void onDestroy() {
    20. // TODO Auto-generated method stub
    21. super.onDestroy();
    22. unregisterReceiver(networkCR);
    23. }
    24. //定义一个继承自BroadcastReceiver的内部类,重写onReceive()方法
    25. //当网络发生变化时onReceive()方法就会被执行
    26. class NetworkChangeReceiver extends BroadcastReceiver{


    27. @Override
    28. public void onReceive(Context arg0, Intent arg1) {
    29. // TODO Auto-generated method stub
    30. Toast.makeText(arg0, "网络发生变化", Toast.LENGTH_SHORT).show();
    31. }
    32. }


    33. }
    展开全文
  • 安卓动态注册广播

    2017-03-16 11:37:24
    如何动态注册广播: 1。首先定义一个广播接收器: public class cotentReceiver extends BroadcastReceiver { public static String strAction = “aaa”;//定义的广播1的Action public static String ...
  • Android 动态注册广播接收不到 (Android开发日记1) Android动态注册自定义广播,结果接收不到广播,久久不能解决。 最终原因:发送广播代码写在一个函数内,此函数在动态注册前面,因未注册就发送广播所以最终这个...
  • 从本质来说,Android 系统的广播机制是一种消息订阅/发布机制,因此,...在 Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的,因此在必要的情况下,我们是需要动态注册广播接收器的。  先回顾
  • Android BroadcastReceiver动态注册广播

    千次阅读 2018-02-26 11:58:15
    在Android7.0之前我们只需要...但是在Android7.0之后,如果我们需要实时监听监听网络状态变化,需要动态注册广播;/** * 广播动态注册 */ NetBroadcastReceiver netBroadcastReceiver = new NetBroadcastReceiver();...
  • 动态注册广播基本使用

    千次阅读 2017-05-01 00:17:24
    动态注册广播就是不在Manifest中写fliter,之所以这样是因为有时候需要监听该广播并响应。但是有时候又不需要监听,所以需要在代码中动态的注册广播并且当不需要的时候就取消注册。  下面以屏幕开启的广播监听为例...
  • Android-动态注册广播和注销广播

    万次阅读 2016-01-13 12:23:00
    Android-动态注册广播和注销广播静态注册广播广播机制在安卓开发很常见也很重要,它既可以静态注册,也可以 动态注册和注销,广播可以设置优先级。 首先是静态 activity_main.xml android:layout
  • 广播接收器注册一共有两种形式 : 静态注册...2.动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。  静态注册是常驻型,也就是说当应用程序关闭后,如果
  • android 静态、动态注册广播浅析

    千次阅读 2017-11-14 18:00:14
    前言代码优化过程中发现好多app的全局网络监听使用动态注册广播方式,而没有采用在清单文件中进行注册 产生了疑问,研究开来只是点还是有一些。总结如下1.广播的注册方式在Android中有两种方式,即动态注册(代码...
  • 本文简单的记录一下动态注册广播的方法: 三个步骤: 1.【创建广播接收器】(就是你的这类广播接收到之后想要干什么); 2.【做一个意图的过滤器】(就是要监听是不是你的广播),创建完之后要【注册】; 3.【取消...
  • 1. 前言 Android中的广播主要可以分为两种类型:标准广播和有序广播。 标准广播是一种完全异步...有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播
  • 【Android】动态注册广播接收器Demo 相关文章链接:http://blog.csdn.net/etzmico/article/details/7317528 PS:之前的版本有个BUG,给大家带来了不便,请多包涵!~
  • Android静态/动态注册广播的区别

    千次阅读 2016-06-12 15:35:29
    1.动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。 静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。2...
  • 静态/动态注册广播的区别

    千次阅读 2016-08-29 13:15:45
    1.动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。  静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行...
  • 动态注册广播接收者

    千次阅读 2016-01-26 15:03:57
    当我们的进度发生变化的时候我们发送一条广播,然后在Activity的注册广播接收器,接收到广播之后更新ProgressBar,代码如下 package com.example.communication; import android.app.Activity; import android....
  • android判断短信是否发送成功[动态注册广播]
  • 动态注册广播:动态注册广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样你的广播接收者就一个非常驻型的了,这种...
  • Android 下的广播简介在Android下,很多事件需要使用到系统下的广播。例如:你想知道手机电量的变化、是否...要使广播生效必须先注册广播,实现注册就是告诉系统:要监听什么广播,和监听到之后要做什么动作完成什么工
  • 【Android】动态注册广播接收器

    万次阅读 多人点赞 2012-03-04 12:20:27
    从本质来说,Android 系统的广播机制是一种消息订阅/发布机制,因此,...在 Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的,因此在必要的情况下,我们是需要动态注册广播接收器的。  先回顾
  • android 动态注册广播

    千次阅读 2014-05-28 00:10:45
    动态注册和静态注册的不同 动态注册是将 在静态注册中  AndroidManifest.xml 中的过滤接收 放在程序里完成,直接看程序 SecondReceiver.java 文件 (新建了 com.test.receiver 包) ...
  • Android动态注册广播

    2016-02-13 12:41:09
    [1]向锁屏,解锁这种频繁的广播事件,均不能在Manifest中注册,需要使用代码来动态实现。//MainActivity package jacky.scream;import android.content.IntentFilter; import android.support.v7.app....
  • 通过点击通知栏发送广播有个坑:动态注册广播无法触发点击事件,其实是可以解决的。 代码示例: //AndroidManifest清单文件配置 <receiver android:name=".MyReceiver"/> //点击事件接收的广播 public class ...
  • android动态注册广播,监听网络状态变化,判断网络模式r
  • 1)静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器...2)动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,231
精华内容 19,692
关键字:

动态注册广播