您的位置:首页 > 其它

BroadcastRecevier(广播)

2015-10-19 10:47 169 查看
BroadcastRecevier(广播)

BroadcastRecevier:广播是Android平台中应用程序之间传输信息的一种机制。

主要负责接收系统或其他程序发出的广播。

BroastcastRecevier:是对广播进行过滤接受并响应的一类组件,是Android最重要的组件之一。

广播机制特点:

广播发送方不关心接收方是否接到数据

广播发送方不关心接收方如何处理数据

广播机制的组成要素:

Broastcast:广播、用于发送广播。

BroastcastRecevier:广播接受者,用于接收广播。

intent:意图,用于保存广播相关的信息。

Broastcast的类型:(两大类)

1、普通广播:完全异步,可以在同一时刻被所有接收者接收到。

优点:信息传递效率高

缺点:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播。

使用方式:Context.sendBroastcast();

2、有序广播:广播按照接收者声明的优先级别,被接收者一次接收广播。

特点:可以终止广播Intent的传播,一旦终止,后面的接收者无法接收;可以将数据传递给下一个接收者。

使用方式:Context.sendOrderBroastcastRecevier();

本地广播

系统广播


常见系统广播:

短信广播:android.provicer.Telephony.SMS_RECEVIED

开机启动广播:android.intent.action.BOOT_COMPLETED

电池电量广播:android.intent.action.BATTERY_CHANGED

拨打电话广播:android.intent.action.NEW_OUTGOING_GALL

电话状态广播:android.intent.action.PHONG_STATE

BroadcastRecevier使用过程中为什么会出现ANR?

BroadcastRecevier生命周期短,

onRecevier方法必须在10秒内完成。

解决方案:

将耗时工作通过Intent发送给Service,由Service进行处理。

Context.startService

使用步骤:

继承BroastcastRecevier

重写onRecevier

订阅广播(代码订阅,清单文件注册订阅)

代码订阅广播的写法:

第1步:继承BroastcastRecevier

第2步:重写onRecevier

public class MyBroastRecevier extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals(BroastTestActivity.MY_ACTION)){

String data=intent.getStringExtra("data");

Toast.makeText(context,data,Toast.LENGTH_LONG).show();

}else{

String data=intent.getStringExtra("data");

Toast.makeText(context,data,Toast.LENGTH_LONG).show();

}

}

}

第3步:Activity中写

public static final String MY_ACTION = "com.example.lenovo.br";

Intent intent = new Intent();

intent.setAction(MY_ACTION);

intent.putExtra("data", "这是我自己发送的广播,测试一下而已");

this.sendBroadcast(intent);

@Override

protected void onDestroy() {

super.onDestroy();

unregisterReceiver(recevier);

}

MY_ACTION :是自己定义的一个标识

第4步:清单文件中,注册recevier

<receiver android:name=".com.example.lenovo.myapp.recevier.MyBroastRecevier">

<intent-filter>

<action android:name="com.example.lenovo.br" />

</intent-filter>

</receiver>

清单文件注册订阅广播的写法

只需要上面的第4步不写

在Activity中onCreate()中添加下面代码即可。

private MyBroastRecevier recevier;

//注册Broadcast

recevier = new MyBroastRecevier();

IntentFilter filter = new IntentFilter();

filter.addAction(MY_ACTION_REGISTER);

registerReceiver(recevier, filter);

最好在清单文件中订阅广播,在Activity中写的话,广播就依附于Activity了,Activity关闭,就不能广播了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: