Android Broadcas 广播
来源:互联网 发布:诗朗诵录音软件 编辑:程序博客网 时间:2024/06/06 02:50
一、广播简介
1. Android四大组件之一
2. 一种全局的监听器,用于监听系统全局的广播消息
3. 系统大部分消息都以广播的形式发布,比如开机启动完成的消息,收到短信的消息,打进打出电话的消息。
ex:
Android系统每次启动完成会向外广播一条信息,告诉所有人启动完成了,只有继承自Broadcast 的类能捕捉到这些系统信息,捕捉到信息该干嘛就干嘛
二、广播实现(自定义广播接收者和发送者)
三、广播的分类
一般广播的发送者会分为 无序广播 和 有序广播
而接收者一般分为 静态接收者 和 动态接收者
无序广播的发送代码:
//发送广播 //两种类型广播 有序广播 无序广播 Intent intent=new Intent(); //指定广播的名字 intent.setAction("com.example.myas_send.Hug"); //指定广播内容 intent.putExtra("content",content); //发送无序广播 sendBroadcast(intent);
而无序广播的还有一个特殊的种类,叫做“无序黏性广播”
//发送无序黏性广播 sendStickyBroadcast(intent);
有序广播的区别也只是在于一句发送代码的不同
//发送有序广播
sendOrderedBroadcast(intent,null);
里面的那个null 是一个指令,可以填写其他的,如果接收者每有添加指令就接收不到发送的信息
接下来我们来讲接收者
先来讲解动态接收者:动态接收者主要是由Java代码编写,需要注册广播和注销广播
package com.example.myas_jiesou_01;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private MyReceiver01 myReceiver01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver01=new MyReceiver01(); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.myas_send.Hug"); intentFilter.setPriority(998); } @Override protected void onResume() { super.onResume(); //注册广播 registerReceiver(myReceiver01,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //取消注册 注销 unregisterReceiver(myReceiver01); }}
上面代码中有一条红色的代码,标识出来主要是因为它只能是接收有序信息的时候用,它的作用是设置优先级,一般优先级为 -1000到1000,-1000为最低,1000为最高。
接下来是静态的接收者:静态接收者主要是在XML文件中配置,这和动态是有区别的
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myas_jiesou_02"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver02"> <intent-filter android:priority="1000"> <action android:name="com.example.myas_send.Hug"></action> </intent-filter> </receiver> </application></manifest>
上面代码中用红色注释的代码即为配置的代码
java代码部分主要是用来接收广播发出的信息,下面的代码中我们还做了一个加工,是一个用来拦截垃圾信息的,比如,下面代码中是信息中带“免费”二字的会被拦截,将不会被接收
package com.example.myas_jiesou_02;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;/** * Created by Administrator on 2017/7/11 0011. */public class MyReceiver02 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action=intent.getAction(); if("com.example.myas_send.Hug".equals(action)){ //获取广播内容 String content=intent.getStringExtra("content"); Log.i("test","广播接受者2号:"+content); //判断 if(content.contains("免费")){ //不传播 abortBroadcast(); } //改变广播的内容 //设置结果 Bundle bundle=new Bundle(); bundle.putString("newContent",content+",开玩笑的,你阔以免费拥有小灰灰"); setResultExtras(bundle); } }}
下面我们来讲讲动态接收和静态接收的区别
一、 动态接收的优先级是大于静态接收的,除非用有序发送时设置了静态接收的优先级大于动态优先级。
二、 静态接收就算关闭了它也能接收到广播发送的信息,而动态接收必须是无序黏性广播发送信息才能在离开时接收到信息。
阅读全文
1 0
- Android Broadcas 广播
- Android Broadcas 广播
- Android Broadcas 广播
- Android中,Broadcas介绍
- android 广播
- android广播
- Android广播
- android广播
- android广播
- android广播
- android 广播
- android 广播
- android 广播
- android广播
- android广播
- android广播
- android 广播
- Android 广播
- shell脚本if条件判断总结
- java访问HDFS文件系统
- 类似于黑名单的短信拦截
- ios CAReplicatorLayer使用
- 笔试题小练2(链表)
- Android Broadcas 广播
- 【全球机器人排名榜】第一名来自岛国日本,怎么破?
- 2017-7-13(框架介绍篇)
- POJ 1141
- 一个非常实用的Android开源工具类库
- php介绍和变量
- 在Mac 系统下搭建php学习环境(Apache+PHP+MySQL)
- 【tensorflow】最新版tensorflow安装
- hibernate_一级缓存