Android Broadcas 广播

一、广播简介

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. }  

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值