Android Broadcas 广播

来源:互联网 发布:迷你led显示屏软件 编辑:程序博客网 时间:2024/06/05 04:06

一、广播简介

1. Android四大组件之一

2. 一种全局的监听器,用于监听系统全局的广播消息

3. 系统大部分消息都以广播的形式发布,比如开机启动完成的消息,收到短信的消息,打进打出电话的消息。

二、广播实现(自定义广播接收者和发送者)


三、广播的分类

一般广播的发送者会分为    无序广播  和  有序广播

而接收者一般分为    静态接收者  和  动态接收者

无序广播的发送代码:

[html] view plain copy
  1. //发送广播  
  2.        //两种类型广播   有序广播   无序广播  
  3.        Intent intent=new Intent();  
  4.        //指定广播的名字  
  5.        intent.setAction("com.example.myas_send.Hug");  
  6.        //指定广播内容  
  7.        intent.putExtra("content",content);  
  8.        //发送无序广播  
  9.        sendBroadcast(intent);  
有序广播的区别也只是在于一句发送代码的不同

[html] view plain copy
  1. <span style="white-space: pre;">    </span>//发送有序广播  
[html] view plain copy
  1. sendOrderedBroadcast(intent,null);  

里面的那个null 是一个指令,可以填写其他的,如果接收者每有添加指令就接收不到发送的信息

下来我们来讲接收者

先来讲解动态接收者:动态接收者主要是由Java代码编写,需要注册广播和注销广播

[html] view plain copy
  1. package com.example.myas_jiesou_01;  
  2.   
  3. import android.content.IntentFilter;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6.   
  7. public class MainActivity extends AppCompatActivity {  
  8.   
  9.     private IntentFilter intentFilter;  
  10.     private MyReceiver01 myReceiver01;  
  11.   
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_main);  
  16.         myReceiver01=new MyReceiver01();  
  17.         intentFilter = new IntentFilter();  
  18.         intentFilter.addAction("com.example.myas_send.Hug");  
  19.         <span style="color:#ff0000;">intentFilter.setPriority(998);</span>  
  20.     }  
  21.   
  22.     @Override  
  23.     protected void onResume() {  
  24.         super.onResume();  
  25.         //注册广播  
  26.         registerReceiver(myReceiver01,intentFilter);  
  27.     }  
  28.   
  29.     @Override  
  30.     protected void onDestroy() {  
  31.         super.onDestroy();  
  32.         //取消注册  注销  
  33.         unregisterReceiver(myReceiver01);  
  34.     }  
  35. }  

上面代码中有一条红色的代码,标识出来主要是因为它只能是接收有序信息的时候用,它的作用是设置优先级,一般优先级为  -1000到1000,-1000为最低,1000为最高。

接下来是静态的接收者:静态接收者主要是在XML文件中配置,这和动态是有区别的

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.myas_jiesou_02">  
  4.   
  5.     <application android:allowBackup="true" android:icon="@mipmap/ic_launcher"  
  6.         android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"  
  7.         android:supportsRtl="true" android:theme="@style/AppTheme">  
  8.         <activity android:name=".MainActivity">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.        <span style="color:#ff0000;"> <receiver android:name=".MyReceiver02">  
  15.             <intent-filter android:priority="1000">  
  16.                 <action android:name="com.example.myas_send.Hug"></action>  
  17.             </intent-filter>  
  18.         </receiver></span>  
  19.     </application>  
  20.   
  21. </manifest>  

上面代码中用红色注释的代码即为配置的代码

java代码部分主要是用来接收广播发出的信息,下面的代码中我们还做了一个加工,是一个用来拦截垃圾信息的,比如,下面代码中是信息中带“免费”二字的会被拦截,将不会被接收

[html] view plain copy
  1. package com.example.myas_jiesou_02;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8.   
  9. /**  
  10.  * Created by Administrator on 2017/7/11 0011.  
  11.  */  
  12.   
  13. public class MyReceiver02 extends BroadcastReceiver {  
  14.     @Override  
  15.     public void onReceive(Context context, Intent intent) {  
  16.        String action=intent.getAction();  
  17.         if("com.example.myas_send.Hug".equals(action)){  
  18.             //获取广播内容  
  19.             String content=intent.getStringExtra("content");  
  20.             Log.i("test","广播接受者2号:"+content);  
  21.   
  22.             //判断  
  23.             if(content.contains("免费")){  
  24.                 //不传播  
  25.                 abortBroadcast();  
  26.             }  
  27.   
  28.             //改变广播的内容  
  29.             //设置结果  
  30.             Bundle bundle=new Bundle();  
  31.             bundle.putString("newContent",content+",开玩笑的,你阔以免费拥有小灰灰");  
  32.             setResultExtras(bundle);  
  33.         }  
  34.     }  
  35. }  

下面我们来讲讲动态接收和静态接收的区别

一、 动态接收的优先级是大于静态接收的,除非用有序发送时设置了静态接收的优先级大于动态优先级。

 二、 静态接收就算关闭了它也能接收到广播发送的信息,而动态接收必须是无序黏性广播发送信息才能在离开时接收到信息。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脚崴了肿了很痛怎么办 九格拼图5在9那怎么办 4s锁屏密码忘了怎么办 6p触屏偶尔乱跳怎么办 新办劳务公司的劳务资质怎么办 汽车没电了打不着火怎么办 吃凉的甜的牙疼怎么办 学车对点对不上怎么办 发现老公有外遇最明智的怎么办 想开个童装店但是没经验怎么办 母乳不够吃宝宝又不喝奶粉怎么办 掉头发很厉害怎么办有什么偏方 红米2a刷死机了怎么办 公司退市我们买的股票怎么办 黑魂3把npc杀了怎么办 摔倒了膝盖摔肿了又痛怎么办 厕所堵了怎么办疏通马桶有妙招 月经不来怎么办如何让它快点来 苹果手机进水了开不了机怎么办 苹果5s进水了怎么办修要多少钱 吃了过期3年的药怎么办 离婚后孩子的抚养费不给怎么办 小车钥匙丢了怎么办配要多少钱 一键启动的车钥匙丢了怎么办 股票退市了手里的股票怎么办 3d硬金以后要换怎么办 偏指甲红肿长在了肉里怎么办 牙齿黄怎么办教你牙齿美白小窍门 2岁孩门牙磕断了怎么办 脸上用了含激素的产品应该怎么办 身上起红疙瘩水泡很痒怎么办 怀疑老公有外遇他不承认怎么办 苹果手机锁屏密码忘了怎么办 黑色t恤洗了掉毛怎么办 老婆要和我离婚我该怎么办 发现老婆有外遇最明智的怎么办 高度近视怎么办我快一千度近 天刀耐久度为0了怎么办 新车被4s店装了怎么办 h面和w面联系线怎么办 造梦西游3到80级怎么办