安卓四大组件之广播机制

Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:

1.同一app内部的同一组件内的消息通信(单个或多个线程之间);

2.同一app内部的不同组件之间的消息通信(单个进程);

3.同一app具有多个进程的不同组件之间的消息通信;

4.不同app之间的组件之间消息通信;

5.Android系统在特定情况下与App之间的消息通信。

静态注册:

定义一个广播接收器继承BroadcastReceiver

packagecom.example.administrator.broadcastdemo;

importandroid.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.widget.Toast;

public class MyReceiver extendsBroadcastReceiver {

public MyReceiver() {

}

@Override

public void onReceive(Context context,Intent intent) {

Toast.makeText(context,intent.getStringExtra("info"),Toast.LENGTH_SHORT).show();

}

}

AndroidManifest.xml

android:name=".MyReceiver"

android:enabled="true"

android:exported="true">




MainActivity.class

packagecom.example.administrator.broadcastdemo;

import android.content.Intent;

import android.os.Bundle;

importandroid.support.v7.app.AppCompatActivity;

public class MainActivity extendsAppCompatActivity {

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//静态注册广播

Intent intent=new Intent();

//与清单文件的receiver的anction对应

intent.setAction("com.broadcast.test");

intent.putExtra("info","测试静态注册广播");

//发送广播

sendBroadcast(intent);

}

}

动态注册:

定义一个广播接收器继承BroadcastReceiver

packagecom.example.administrator.broadcastdemo;

importandroid.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.widget.Toast;

public class DynamicReceiverextends BroadcastReceiver {

public DynamicReceiver () {

}

@Override

public void onReceive(Context context,Intent intent) {

Toast.makeText(context,intent.getStringExtra("name"),Toast.LENGTH_SHORT).show();

}

}

Main2Activity.class

packagecom.example.administrator.broadcastdemo;

import android.content.Intent;

importandroid.content.IntentFilter;

importandroid.content.pm.ActivityInfo;

importandroid.content.res.Configuration;

importandroid.net.ConnectivityManager;

import android.os.Bundle;

importandroid.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.widget.Toast;

public class Main2Activityextends AppCompatActivity {

DynamicReceiver dynamicReceiver;

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

//动态注册广播

dynamicReceiver = newDynamicReceiver();

IntentFilter intentFilter = newIntentFilter();

intentFilter.addAction("com.broadcast.test2");

registerReceiver(dynamicReceiver,intentFilter);

//发送信息

Intent intent=new Intent();

intent.setAction("com.broadcast.test2");

intent.putExtra("name","动态注册广播");

sendBroadcast(intent);

}

@Override

protected void onDestroy() {

super.onDestroy();

//解除广播

unregisterReceiver(dynamicReceiver);

}

}

AndroidManifest.xml

android:name=".DynamicReceiver"

android:enabled="true"

android:exported="true">

总结:

1)静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。

2)动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。

android:enabled:

这个属性用于定义系统是否能够实例化这个广播接收器,如果设置为true,则能够实例化,如果设置为false,则不能被实例化。默认值是true。

元素有它自己的enabled属性,这个属性会应用给应用程序的所有组件,

包括广播接收器。和元素的这个属性都必须是true,这个广播接收器才能够被启用。如果有一个被设置为false,该广播接收器会被禁止实例化。

android:exported:

这个属性用于指示该广播接收器是否能够接收来自应用程序外部的消息,如果设置true,则能够接收,如果设置为false,则不能够接收。如果设置为false,这该接收只能接收那些由相同应用程序组件或带有相同用户ID的应用程序所发出的消息。


参考资料:

百度百科--安卓广播机制

菜鸟教程 http://www.runoob.com/android/android-broadcast-receivers.html

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

推荐阅读更多精彩内容