Android中的静态系统广播与动态系统广播及其相应的注册与接收
来源:互联网 发布:免费男女啪啪软件 编辑:程序博客网 时间:2024/05/18 00:26
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过滤接收的过程:
首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调
用 , Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出
去。当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就
会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()
法。但是广播注册有两种方法,静态与动态注册广播。
静态广播:
可在AndroidManifest.xml中定义,不需程序启动即可接收,可用作自动启动程序
动态广播:
只能在代码中注册,程序适应系统变化做操作,程序运行状态才能接收到
无序广播
静态广播:
1.静态广播的注册
xml:activity_main
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.y2_android21_send.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_content" android:hint="请输入要发送的内容" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送" android:onClick="send" /></LinearLayout>
xml对应的activity:MainActivity
package com.example.y2_android21_send;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText et_main_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_content = (EditText) findViewById(R.id.et_main_content); } public void send(View view){ String content=et_main_content.getText().toString(); //发送广播 //两种类型广播 //有序广播 无序广播 Intent intent=new Intent(); //指定广播的名字 intent.setAction("com.example.y2_android21_send.Hug"); //指定广播内容 intent.putExtra("content",content); //发送无序广播 sendBroadcast(intent); }}
2.定义广播接收MyReceiver02
package com.example.y2_android21_reciever02;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;import android.widget.Toast;/** * 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.y2_android21_send.Hug".equals(action)){ //获取广播内容 String content=intent.getStringExtra("content"); Log.i("test","广播接受者2号:"+content); } }}
<receiver android:name=".MyReceiver02"> <intent-filter> <action android:name="com.zking.administrator.g160628_android21_sender.Hug"></action> </intent-filter> </receiver>
动态广播
1.动态广播注册
xml:activity_main
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.y2_android21_send.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_content" android:hint="请输入要发送的内容" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送" android:onClick="send" /></LinearLayout>
xml对应的activity:MainActivity
package com.example.y2_android21_send;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText et_main_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_content = (EditText) findViewById(R.id.et_main_content); } public void send(View view){ String content=et_main_content.getText().toString(); //发送广播 //两种类型广播 //有序广播 无序广播 Intent intent=new Intent(); //指定广播的名字 intent.setAction("com.example.y2_android21_send.Hug"); //指定广播内容 intent.putExtra("content",content); //发送无序广播 sendBroadcast(intent); }}
2.定义广播接收
MainActivity
package com.example.y2_android21_receiver01;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private MyReceiver01 myReceiver01; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver01 = new MyReceiver01(); intentFilter = new IntentFilter(); intentFilter.addAction("com.example.y2_android21_receiver01.Hug"); } @Override protected void onResume() { super.onResume(); //注册广播 registerReceiver(myReceiver01,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //取消注册 注销 unregisterReceiver(myReceiver01); }}
MyReceiver01
package com.example.y2_android21_receiver01;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;import android.widget.Toast;/** * Created by Administrator on 2017/7/11 0011. */public class MyReceiver01 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //获取广播的名字 String action=intent.getAction(); if("com.example.y2_android21_send.Hug".equals(action)){ //获取广播内容 String content=intent.getStringExtra("content");// Log.i("test","广播接受者1号:"+content); Toast.makeText(context, "广播接受者1号:"+content, Toast.LENGTH_SHORT).show(); } }}
有序广播
1.静态广播
1.静态广播注册
xml:activity_main:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zking.administrator.g160628_android21_sender.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_content" android:hint="请输入要发送的内容" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送" android:onClick="send" /></LinearLayout>
package com.zking.administrator.g160628_android21_sender;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText et_main_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_content = (EditText) findViewById(R.id.et_main_content); } public void send(View view){ String content=et_main_content.getText().toString(); //发送广播 //两种类型广播 //有序广播 无序广播 Intent intent=new Intent(); //指定广播的名字 intent.setAction("com.zking.administrator.g160628_android21_sender.Hug"); //指定广播内容 intent.putExtra("content",content); //发送有序广播 sendOrderedBroadcast(intent,null); }}
package com.zking.administrator.g160628_android21_receiver02;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.zking.administrator.g160628_android21_sender.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); } }}
3.广播接收的配置的xml里加上这样一句代码
<receiver android:name=".MyReceiver02"> <intent-filter android:priority="1000" > <action android:name="com.zking.administrator.g160628_android21_sender.Hug"></action> </intent-filter> </receiver>
动态广播
动态广播注册
xml:activity_main:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zking.administrator.g160628_android21_sender.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/et_main_content" android:hint="请输入要发送的内容" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送" android:onClick="send" /></LinearLayout>
package com.zking.administrator.g160628_android21_sender;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText et_main_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_content = (EditText) findViewById(R.id.et_main_content); } public void send(View view){ String content=et_main_content.getText().toString(); //发送广播 //两种类型广播 //有序广播 无序广播 Intent intent=new Intent(); //指定广播的名字 intent.setAction("com.zking.administrator.g160628_android21_sender.Hug"); //指定广播内容 intent.putExtra("content",content); //发送有序广播 sendOrderedBroadcast(intent,null); }}
package com.zking.administrator.g160628_android21_receiver01;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private MyReceiver01 myReceiver01; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceiver01 = new MyReceiver01(); intentFilter = new IntentFilter(); intentFilter.addAction("com.zking.administrator.g160628_android21_sender.Hug"); intentFilter.setPriority(998); } @Override protected void onResume() { super.onResume(); //注册广播 registerReceiver(myReceiver01,intentFilter); } @Override protected void onDestroy() { super.onDestroy(); //取消注册 注销 unregisterReceiver(myReceiver01); }}
MyReceiver01:
package com.zking.administrator.g160628_android21_receiver01;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 MyReceiver01 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //获取广播的名字 String action=intent.getAction(); if("com.zking.administrator.g160628_android21_sender.Hug".equals(action)){ //获取广播内容 //String content=intent.getStringExtra("content"); //获取结果 Bundle bundle=getResultExtras(true); String content=bundle.getString("newContent"); Log.i("test","广播接受者1号:"+content); } }}
- Android中的静态系统广播与动态系统广播及其相应的注册与接收
- Android广播的静态与动态注册
- Android 接收系统发送的广播,动态注册和静态注册
- Android中的静态系统广播和动态系统广播
- Android中的静态系统广播和动态系统广播
- Android中的静态系统广播和动态系统广播
- 【Android成长之路】全局大喇叭——广播机制的浅谈(接收系统广播与动、静态注册接收器)
- Android 广播BroadcastReceiver静态/动态注册,获取系统电量广播【开机广播】,获取网络状态广播,Timer的使用简介
- android 动态广播与静态广播区别
- BroadcastReceiver静态注册广播与动态注册广播接收器
- 静态广播与动态广播的区别
- 广播的动态注册和静态注册以及系统广播的使用!
- android之旅15 广播与广播接收者: 接收系统广播
- Android静态注册广播和动态注册广播的区别
- android-接收系统广播
- android接收系统广播
- 动态广播与静态广播
- 静态广播与动态广播
- adb操作命令详解及大全
- 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
- 【NOIP2017提高A组模拟7.13】第K小数
- 【转载】<marquee>标签去除空白代码
- page、request、session和application的区别
- Android中的静态系统广播与动态系统广播及其相应的注册与接收
- 设置span的背景框为椭圆
- 发工资咯:)
- 机器学习(二)- learning rate
- java--动态代理
- rabbitmq测试
- 配置MySQL远程连接
- 修改MySQL的登录密码
- 高并发下减库存操作避免超卖