广播机制

广播机制

动态注册

所谓动态注册是指注册逻辑是写在onCreate()中的,即必须要在程序启动之后才能接收到广播。

1.设置广播接收器。

class NetworkChangeReceiver extends BroadcastReceiver{

public void onReceive(Context context,Intent intent){

        //得到connectionManager的实例,用来管理网络连接

        ConnectivityManager connectionManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

        //得到networkInfo的实例

        NetworkInfonetworkInfo=connectionManager.getActivityNetworkInfo();

        //判断网络连接做出相应的反应

        if(networkInfo!=null&&networkInfo.isAvailable()){

               Toast.makeText(context,"networkis available",Toast.LENGTH_SHORT).show();

        }else{

               Toast.makeText(context,"networkis unavailable",Toast.LENGTH_SHORT).show();

        }

}

}

2.发送广播

//在onCreate()外部定义

private IntentFilter IntentFilter;

private NetworkChangeReceiverNetworkChangeReceiver;

protected void onCreate(BundlesavedInstanceState){

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       intentFilter=new IntentFilter();

       //添加广播接收器要接收的广播

       intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

       NetworkChangeReceiver=newNetworkChangeReceiver();

       //注册广播,当接收到intentFilter里添加的广播消息时就开始执行NetworkChangeReceiver里的内容

       registerReceiver(NetworkChangeReceiver,intentFilter);

}

3.动态注册的广播需要取消注册

protected void onDestroy(){

       super.onDestroy();

       unregisterReceiver(NetworkChangeReceiver);

}

另:要访问系统网络状态需要添加权限

<user-permission android:name=”android.permission.ACCESS_NETWORK_STATE/>

静态注册

1.通动态注册需要写广播接收器,类名比如为BootCompleteReceiver()(在一个单独的文件直接通过android studio中实现创建广播文件)。

2.已自动在AndroidManifest.xml中注册完成,同时声明要发送的广播。

<receiver

  android:name=".BootCompleteReceiver"

   android:enabled="true"

   android:exported="true">

  < intent-filter>

    <action android:name="android.intent.action.BOOT_CONPLETED"/>

< /intent-filter>

      </receiver>


3.相应的权限允许

<user-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED/>


发送标准广播

1.定义广播接收器,MyBroadcastReceiver() extends BroadcastReceiver.同上。

2.在AndroidManifest.xml中进行注册。

<receiver

android:name=".MyBroadcasrReceiver"

   android:enabled="true"

   android:exported="true">

   < intent-filter>

   action android:name="android.intent.action.MY_BROADCAST"

< /intent-filter>

</receiver>

3.发送广播。

Intent intent=newIntent("com.example.broadcasttest.MY_BROADCAST");

sendBroadcast(intent);


发送有序广播

有序广播是指当同时有两个或两个以上的广播接收器接收的广播内容是一样的时候,有必要指定一下接收广播的顺序和要不要继续将广播传递下去。

1.设置优先级

 <intent-filter android:priority=”100”>

<action android:name=" com.example.broadcasttest.MY_BROADCAST"/>

</intent-filter>

2.发送广播方式

sendOrderedBroadcast(intent,null);

3.截断广播

abortBroadcast();

发送本地广播

前面所定义的广播是跨应用程序的,即发送的广播可以被其他应用接收,外部发送的广播也可以被我们的应用程序接收。本地广播是指广播的发送和接收在应用程序内部进行,使用的是动态注册的方式。

1.接收广播的内容同上是一样的

2.创建一个本地广播管理器,并获取实例

private localBroadcastManager localBroadcastManager;

localBroadcastManager =localBroadcastManager.getInstance(this);//获取实例

3.发送广播

LocalBroadcastManager.sendBroadcast(intent);//发送本地广播

4.注册本地广播监听器

localBroadcastManager.registerReceiver(localReceiver,intentFilter);

5.取消广播的注册

protected void onDestroy(){

       super.onDestroy();

       localBroadcasrManager.unregisterReceiver(localReceiver);

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容

  • 在一个IP网络范围中,最大的ip地址是被保留用作广播地址来使用的,比如某个IP范围是192.168.0.xxx,子...
    小徐andorid阅读 1,341评论 0 1
  • 案例最后效果: 广播的类型: 标准广播 标准广播是完全异步的广播, 也就是当广播发出之后, 所有的广播接收器机会都...
    史慧君阅读 3,118评论 2 50
  • 谨以文章记录学习历程,如有错误还请指明。 前言 我们上学时都有过这样的经历,当我们在火车站列车候车室中等待时,每当...
    whd_Alive阅读 7,620评论 2 13
  • 诸多无奈,最近在改一个项目的bug的时候,脑子老是一片空白,可能是最近脑子不够用,总之,好多东西忘了,阅读一些别人...
    狗子王1948阅读 7,707评论 6 53
  • 作为Android的四大组件之一,广播机制一直萦绕在我们生活中,比如手机开机完成后会发出一条广播,手机电量不足时也...
    loser先生阅读 1,389评论 0 2