Android菜鸟的成长笔记(26)——普通广播与有序广播
BroadcastReceiver是Android系统的四大组件之一,BroadcastReceiver是一个全局的系统级监听器,它拥有自己的独立进程。
我们来写一个最简单的广播接收过程
先在manifest中定义一个广播接受者
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.broadcasttest.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.broadcasttest.MyBroadCast">
<intent-filter >
<action android:name="com.meritit.action.MY_BROADCAST"/>
</intent-filter>
</receiver>
</application>
广播接收者
public class MyBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "接收到的值为:" + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
}
}
向广播接收者发送广播
package com.example.broadcasttest; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setAction("com.meritit.action.MY_BROADCAST");
intent.putExtra("msg", "阳光小强");
sendBroadcast(intent);
}
});
}
}
运行结果:
上面的例子是一个普通的广播接受者,下面我们来修改一下代码看看有序的广播接受者
<receiver
android:name="com.example.broadcasttest.MyBroadCast">
<intent-filter android:priority="20">
<action android:name="com.meritit.action.MY_BROADCAST"/>
</intent-filter>
</receiver>
<receiver
android:name="com.example.broadcasttest.MyBroadCast2">
<intent-filter android:priority="0" >
<action android:name="com.meritit.action.MY_BROADCAST"/>
</intent-filter>
</receiver>
两个广播接收者设置了优先级,上面的优先级比下面的高
Intent intent = new Intent();
intent.setAction("com.meritit.action.MY_BROADCAST");
intent.putExtra("msg", "阳光小强");
sendOrderedBroadcast(intent, null);
发送有序广播,注意是sendOrderedBroadcast
public class MyBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "接收到的值为:" + intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
Bundle bundle = new Bundle();
bundle.putString("msg2", "有序的广播");
setResultExtras(bundle);
//如果不想继续传播
//abortBroadcast();
}
}
优先级高的MyBroadCast先接收到,有序广播接收者可以添加新数据给下个等级的接受者。这种形式就有点像拦截器。
public class MyBroadCast2 extends BroadcastReceiver{
private static final String TAG = "broadcast";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = getResultExtras(true);
String msg = intent.getStringExtra("msg");
String msg2 = bundle.getString("msg2");
Log.i(TAG, msg);
Log.i(TAG, msg2);
}
}
最后输出结果:
除了接收用户发送的广播之外,BroadcastReceiver还有一个重要作用,就是接收系统广播。
详细请看:http://developer.android.com/reference/android/content/Intent.html
下面列出Android常见的广播。
ACTION_TIME_TICKACTION_TIME_CHANGED 系统时间被改变ACTION_TIMEZONE_CHANGED 系统时区被改变ACTION_BOOT_COMPLETED 系统启动完成ACTION_PACKAGE_ADDED 系统添加包ACTION_PACKAGE_CHANGED 系统的包改变ACTION_PACKAGE_REMOVED 系统的包被删除ACTION_PACKAGE_RESTARTED 系统的包被重启ACTION_PACKAGE_DATA_CLEARED 系统的包数据被清空ACTION_UID_REMOVEDACTION_BATTERY_CHANGED 电池电量改变ACTION_POWER_CONNECTED 系统连接电池ACTION_POWER_DISCONNECTED 系统与电源断开ACTION_SHUTDOWN 系统被关闭
例如检测电池电量过低
<receiver
android:name="com.example.broadcasttest.MyBroadCast3">
<intent-filter >
<action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
</intent-filter>
</receiver>
public class MyBroadCast3 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
int current = bundle.getInt("level");
int total = bundle.getInt("scale");
if(current * 1.0 / total < 0.15){
Toast.makeText(context, "电池电量过低,请尽快充电", Toast.LENGTH_LONG).show();
}
}
}
Android菜鸟的成长笔记(26)——普通广播与有序广播的更多相关文章
- Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy
原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有 ...
- Android菜鸟的成长笔记(2)——第一个Android应用
原文:Android菜鸟的成长笔记(2)--第一个Android应用 上一篇:Android菜鸟的成长笔记(1)--Anddroid环境搭建从入门到精通 在上一篇Android菜鸟的成长笔记(1)中我 ...
- Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通
原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...
- Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上)
原文:[置顶] Android菜鸟的成长笔记(14)—— Android中的状态保存探究(上) 我们在用手机的时候可能会发现,即使应用被放到后台再返回到前台数据依然保留(比如说我们正在玩游戏,突然电话 ...
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
原文:[置顶] Android菜鸟的成长笔记(13)——异步任务(Async Task) Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(App ...
- Android菜鸟的成长笔记(12)——Handler、Loop、MessageQueue
原文:[置顶] Android菜鸟的成长笔记(12)——Handler.Loop.MessageQueue 当一个程序第一次启动时,Android会启动一条主线程(Main Thread),主线程主要 ...
- Android菜鸟的成长笔记(11)——Android中的事件处理
原文:[置顶] Android菜鸟的成长笔记(11)——Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调的 ...
- Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值
原文:[置顶] Android菜鸟的成长笔记(10)——使用Bundle在Activity之间传值 前面我们了解了如何启动一个Activity,一个Activity在启动另外一个Activity的时候 ...
- Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)
原文:[置顶] Android菜鸟的成长笔记(9)——Intent与Intent Filter(下) 接着上一篇的内容,下面我们再来看看Intent的Data与Type属性. 一.Data属性与Typ ...
- Android菜鸟的成长笔记(8)——Intent与Intent Filter(上)
原文:[置顶] Android菜鸟的成长笔记(8)——Intent与Intent Filter(上) Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指 ...
随机推荐
- Android 调试出现 could not get wglGetExtensionsStringARB
解决 AVD Manager -> 选择模拟器 -> 点击 Edit看 Enabled 是不是被选中了.是的话取消选中,OK.希望对你实用.
- [D3JS] Add more map layer and color
import React, {Component} from 'react'; import * as d3 from 'd3'; import 'd3-geo'; import * as topoj ...
- Android学习笔记之按键操作
我们如何和Android 程序来进行交互那份?来让 Android 程序产生相应的反应,我们不得不通过键盘事件.触摸事件.传感器事件等来实现. 键盘是Android中主要的输入设备,对按键的响应的处理 ...
- 94.文件bat脚本自删除
taskkill / f / im 自删除.exedel 自删除.exedel 1.bat void main() { FILE *pf = fopen("1.bat", &quo ...
- 14、序列化操作,类的保存和dict转JSON
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...
- 今天遇到奇怪的事:SVN本地代码的标记突然没了,Clean up也报错
今天遇到奇怪的事:SVN本地代码的标记突然没了.Clean up也报错 脑子一想这样的情况,能够先把原来的文件夹改一个名字.又一次把代码check out下来,再合并提交更新,但这样也太LOW了吧 上 ...
- 魅族MX5和努比亚布拉格手机參数对照
想买个Android手机锁定魅族MX5和努比亚布拉格.两个官网翻来翻去的非常难取舍,自己列了一个表对比了一下參数,本人喜欢薄一点的手机.有feel.參数对比表例如以下: 手机 魅族MX5 努比亚布拉格 ...
- 第一个hello word 驱动载入失败--------
今天尝试自己载入第一个驱动模块,依据惯例hello word 然后失败了,如今说明我的操作过程.请个位看看. 首先我的内核版本号: 模块代码与MAKEFILE #include<linux/in ...
- 卫星网络中使用TCP协议的劣势(所以才有TCP优化版用来卫星通信啊,比如TCP-Peach和ADolar)
卫星网络中使用TCP协议的劣势 为了避免产生网络拥塞,原TCP协议综合采用了慢启动.拥塞避免.快速重传以及快速恢复等算法.但这些算法应用的前提是网络发生拥塞造成丢包,然而在误码率相对较高的卫星通信系统 ...
- 【p092】分数线划定
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 世博会志愿者的选拔工作正在A市如火如荼地进行.为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔 ...