Android_Broadcast
/**
* Broadcast(广播):是一种广泛运用的在应用程序之间传输信息的机制
*
* BroadcastReceiver(广播接收者)
* 是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播
* 使用方法:
* 发送:把信息装入一个intent对象(action,category)
* 通过调用相应方法将intent对象以广播形式发送出去
* sendBroadcast()
* sendOrdercast()
* sendStickyBroadcast()
* 注意!!!
* BroadcastReceiver生命周期只有十秒左右,
* 如果在onReceiver内做超过十秒内的事情,就会报错
* 应该通过发送Intent给service,由service来完成
* 不能用子线程
*
*广播的种类:
* 普通广播,有序广播,异步广播(不能讲处理结果传给下一个接收者,无法终止广播)
* 普通广播的特点:
* -同级别接收先后是随机的(无序)
* -级别低的后收到广播(priority)
* -接收器不能截断广播的传播也不能处理广播,否则报错
* -同级别动态注册高于静态注册
*
* 有序广播的特点:
* -同级别接收顺序是随机的
* -能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定把该广播是否截断
* -接收器能截断广播的继续传播,也能处理广播
* -同级别动态注册高于静态注册
*
*静态注册:在manifest里面注册(与activity类似)
* <receiver android:name="com.examle.android_broadcast.MyBroadcastReceiver1">
<intent-filter android:priority="200" >
<action android:name="broadcast_one"/>
</intent-filter>
</receiver>
android:priority="200" 优先级,范围-1000到1000
动态注册:在MainActivity中注册,
IntentFilter filter = new IntentFilter("broadcast_one");//创建过滤器,过滤动作为broadcast_one的广播
MyBroadcastReceiver1 receiver = new MyBroadcastReceiver1();//创建广播接收对象
registerReceiver(receiver, filter);//注册广播
!!!注意:动态注册广播后需要在广播接收后关闭广播(重写onDestory方法)
* @author Administrator
*
*/
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android_broadcast"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.BROADCAST_STICKY"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.example.android_broadcast.MyBroadcastReceiver1">
<intent-filter android:priority="200">
<action android:name="broadcast_one"/>
</intent-filter>
</receiver>
<receiver android:name="com.example.android_broadcast.MyBroadcastReceiver2">
<intent-filter android:priority="100">
<action android:name="broadcast_one"/>
</intent-filter>
</receiver>
</application> </manifest>
xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android_broadcast.MainActivity" >
<Button
android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="doClick"
android:text="发送一条普通广播"/>
<Button
android:id="@+id/btn_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="doClick"
android:text="发送一条有序广播"/>
<Button
android:id="@+id/btn_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="doClick"
android:text="发送一条异步广播"/> </LinearLayout>
源代码MainActivity:
package com.example.android_broadcast; import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button; public class MainActivity extends Activity { private MyBroadcastReceiver3 receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*IntentFilter filter = new IntentFilter("broadcast_one");//创建过滤器,过滤动作为broadcast_one的广播
MyBroadcastReceiver1 receiver = new MyBroadcastReceiver1();//创建广播接收对象
registerReceiver(receiver, filter);//注册广播
*/ }
public void doClick(View view){
switch(view.getId()){
case R.id.btn_1://发送一条普通广播
Intent intent = new Intent();
intent.putExtra("msg", "这是一条普通广播");//设置发送的信息
intent.setAction("broadcast_one");//设置发送的动作
sendBroadcast(intent);//发送广播 break;
case R.id.btn_2://发送一条有序广播
Intent intent2 = new Intent();
intent2.putExtra("msg", "这是一条有序广播");
intent2.setAction("broadcast_one");//跳转的动作
sendOrderedBroadcast(intent2, null);
break;
case R.id.btn_3://发送一条异步广播,
//异步广播不能终止也就是会每次都存在,用先发送后注册来说明,点击n次出现n条广播 unregisterReceiver(receiver);该方法对其并不起作用
Intent intent3 = new Intent();
intent3.putExtra("msg", "这是一条异步广播");
intent3.setAction("broadcast_three");
sendStickyBroadcast(intent3);
IntentFilter filter = new IntentFilter("broadcast_three");
receiver = new MyBroadcastReceiver3();
registerReceiver(receiver, filter); break; }
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//unregisterReceiver(receiver);
}
}
MyBroadcastReceiver1:
package com.example.android_broadcast; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle; public class MyBroadcastReceiver1 extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String s = intent.getStringExtra("msg");
System.out.println("broadcast_one接收消息:"+s);
//有序广播中,可以对收到的数据进行截断或处理
//abortBroadcast();//截断广播,如果是普通广播,就会失败
Bundle bundle = new Bundle();
bundle.putString("newMsg", "数据被广播1处理过-->"+s);
setResultExtras(bundle);
} }
MyBroadcastReceiver2:
package com.example.android_broadcast; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle; public class MyBroadcastReceiver2 extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String s = intent.getStringExtra("msg");
System.out.println("broadcast_two接收消息:"+s);
Bundle bundle = getResultExtras(true);
String s2 = bundle.getString("newMsg");
System.out.println("broadcastreceiver2得到的结果是:"+s2);
} }
MyBroadcastReceiver3:
package com.example.android_broadcast; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; public class MyBroadcastReceiver3 extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String s = intent.getStringExtra("msg");
System.out.println("broadcast_three接收消息:"+s);
//abortBroadcast();//截断广播,因为是普通广播,所以会失败 } }
Android_Broadcast的更多相关文章
随机推荐
- [HDU 1565+1569] 方格取数
HDU 1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- XCode中Architecturs配置及常见问题
http://lanvige.github.io/2014/03/19/architecturs-in-xcode/ XCode 5.1升级后因arm64和CocoaPods的原因,痛了一天,终于解决 ...
- 对象、对象数组、JSON、JSON数组的相关操作
本文主要是对JS操作JSON的要领做下总结在JSON中,有两种结构:对象和数组 1. 一个对象以“{”(左括号)开始,“}”(右括号)结束.每个“名称”后跟一个“:”(冒号):“"名称/值& ...
- 惠威的M200MK3的前级电子分频板
M200MKIII是惠威融合了尖端有源电子分频技术而诞生的全新产品:双4声道运算放大器.高档玻璃纤维电路板.全SMT制作工艺.红宝石滤波电容阵列.进口金属化聚丙稀分频电容.超大功率TDA7294功放芯 ...
- STL总结之queue, priority_queue, stack
之所以把这三个容器放在一起,是因为他们都是容器适配器. STL中queue就是我们常用的FIFO队列,实现是一个容器适配器,这种数据结构在网络中经常使用. queue的模板声明: templa ...
- Kettle汇总时参数
Kettle汇总时手动执行小时汇总命令: ./kitchen.sh -norep -file /usr/local/evqm/kettle/kettle_scripts/rpt_hour.kjb -p ...
- 【CSS】Intermediate4:Background Images
1. background:background-color url-background-image background-repeat(repeat/repeat-y/repeat-x/no-re ...
- Python安装、配置
1.Python简介:Python在Linux.windows.Mac os等操作系统下都有相应的版本,不管在什么操作系统下,它都能够正常工作.除非使用平台相关功能,或特定平台的程序库,否则可以跨平台 ...
- 动态加载JS脚本的4种方法
实现OPOA(One Page One Application)时,必须使用动态加载js. 也就是在用户选择某个菜单项后,再动态加载对应的全部js到客户端. 动态加载js的情况很多啊,比如解决ajax ...
- Sublime Text 2 使用心得
一. 前言 作为一个前端,有一款好的开发利器是必不可少的,editplus.notepad++都是不错的工具,体积轻巧,启动迅速(dw太浮肿了).最近,又有一款新的编辑器诞生,席卷前端界,惹得无数喜爱 ...