Broadcast广播
2016-07-15 19:10
162 查看
Broadcast广播
广播 生命周期只有十秒左右从[调用对象—实现onReceive—结束]
广播要创建一个类,继承BroadcastReceiver
在继承类重写 onReceive(Context context, Intent intent)
<intent-filter><action>事件:
android.intent.action.MEDIA_UNMOUNTED :监听SD卡拔出
android.intent.action.BOOT_COMPLETED :开机启动
注意,一定要加上权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
android.intent.action.NEW_OUTGOING_CALL :手机拨号
注意,一定要加上权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
android.intent.action.PACKAGE_ADDED” : 监听安装
android.intent.action.PACKAGE_REMOVED” :监听卸载
<data android:scheme="package" /> :获得安装卸载的数据
BroadcastReceiver代码: @Override public void onReceive(Context context, Intent intent) { // 获得监听 用来判断 是安装还是卸载 String listener = intent.getAction(); if ("android.intent.action.PACKAGE_ADDED".equals(listener)) { // intent.getData().toString() 获得卸载包名 System.out.println(intent.getData().toString() + "已安装"); } else if ("android.intent.action.PACKAGE_REMOVED".equals(listener)) { System.out.println(intent.getData().toString() + "已卸载"); }
BroadcastReceiver 有序与无序
有序
按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到
1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容.效率慢
无序
发送一个广播,所以监听该广播的广播接收者都可以监听到该广播。
无序广播 sendBroadcast(Intent intent)
自定义Broadcast
启动发送 sendBroadcast(intent);//无序广播
用Intent.setAction(“send”);自己建立频道
把自建频道写入到 <action android:name="自建频道" /> <receiver android:name=".sendBroadcastContent"> <intent-filter> <action android:name="自建频道"></action> </intent-filter>
有序广播
sendOrderedBroadcast(Intentintent,StringreceiverPermission,BroadcastReceiverresultReceiver,Handler scheduler, int initialCode, StringinitialData,BundleinitialExtras)
参数:
intent:意图
receiverPermission:接收方
resultReceiver:结果接收器 //new新建广播不用再AndroidManifest.xml声明,此参数监视最后广播得到的内容getResultData()
scheduler:调度器
initialCode:检测码
initialData:广播数据内容
initialExtras:临时增加捆绑
用Intent.setAction(“send”);自己建立频道
String data = getResultData(); 获得广播数据内容
setResultData(String); 篡改数据内容
abortBroadcast();拦截广播,将不再进行广播
把自建频道写入到 <action android:name="自建频道" /> 设置优先级 <intent-filter android:priority="1000"/> 设置优先级 1000至-1000 <receiver android:name=".ShengBroadcast"> <!-- android:priority="1000" 设置优先级 1000至-1000 --> <intent-filter android:priority="1000"> <action android:name="自建频道"></action> </intent-filter> </receiver>
在android里面有一些产生非常频繁的广播事件,在清单文件里面配置是不会生效.电量变化 屏幕锁屏/解锁 这些广播事件只能利用代码注册.
android.intent.action.SCREEN_OFF 屏幕锁定
android.intent.action.SCREEN_ON 屏幕解锁
<receiver android:name=".ScreenStatus"> <intent-filter> <action android:name="android.intent.action.SCREEN_OFF"></action> <action android:name="android.intent.action.SCREEN_ON">s</action> </intent-filter> </receiver>
// 接收广播 public class ScreenStatus extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); System.out.println("Action:" + action); } }
public class MainActivity extends AppCompatActivity { private ScreenStatus status; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //自建的广播接收器 status = new ScreenStatus(); //意图过滤器 IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.SCREEN_OFF"); filter.addAction("android.intent.action.SCREEN_ON"); //注册广播 registerReceiver(status, filter); } //销毁避免错误信息显示 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(status); status = null; } }
手机屏蔽返回键
调用Main方法 onBackPressed():屏蔽返回键,去掉return便可
www.grepcode.com
查询旧版本源代码网站
无法快捷键出来,必须手输入,高版本已被隐藏掉 android.provider.Telephony.SMS_RECEIVED 注意,一定要加上权限 <uses-permission android:name="android.permission.RECEIVE_SMS" /> 短信接收监听 //短信的数据是pdu的数据,必须对短信的格式很了解才可以解析短信. Object[] objs = (Object[]) intent.getExtras().get("pdus"); for(Object obj : objs){ SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); String body = smsMessage.getMessageBody(); String sender = smsMessage.getOriginatingAddress(); System.out.println("body"+body); System.out.println("sender"+sender); }
相关文章推荐
- Android中BroadcastReceiver(异步接收广播Intent)的使用
- 使用Broadcast实现Android组件间的通信
- Android使用广播(BroadCast)实现强制下线的方法
- Android使用BroadcastReceiver实现手机开机之后显示画面的功能
- Android提高之BroadcastReceiver实例详解
- 详解Android中BroadCastReceiver组件
- Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
- Android中的广播(BroadCast)详细介绍
- Android开发之BroadcastReceiver用法实例分析
- Android基础知识之broadcast广播详解
- 简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
- 广播 BroadCastReceiver
- BroadcastReceiver应用详解
- Android中利用广播接受者简单几步实现拨号显示归属地
- 拦截短信
- Android中BroadcastReceiver理解
- 接收其他应用程序发出的创建快捷方式的广播
- 关于安卓手机开机自启动APP无法成功的问题
- angularjs(step by step):消息传播$broadcast $emit 和 $on