Android的广播(BroadcastReceiver)
来源:互联网 发布:linux制作iso镜像 编辑:程序博客网 时间:2024/05/16 06:50
1.BroadcastReceiver简介
BroadcastReceiver用于接受程序(包括开发的程序和系统程序)所发出的广播,与应用程序启动Activity、Service相同的是,程序启动BroadcastReceiver也只需要两步
- 创建需要启动BroadcastReceiver的Intent
- 调用Contxt的sendBroadcast()或者sendOrderBroadcast()方法来启动指定的BroadcastReceiver
普通广播
sendBroadcast()用于发送普通广播
首先,定义广播MyReceiver.java
package com.zhoujian.broadcastreceiver.receiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;/** * Created by zhoujian on 2016/12/27. */public class MyReceiver extends BroadcastReceiver{ private String mMsg; @Override public void onReceive(Context context, Intent intent) { //注意此方法内部不能做耗时操作,容易引起ANR if (intent.getAction().equals("zhoujian.define.broadastreceiver")) { mMsg = intent.getStringExtra("msg"); Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show(); } }}
其次,在清单文件中静态注册广播
<receiver android:name=".receiver.MyReceiver"> <intent-filter> <!--指定广播所响应的Action--> <action android:name="zhoujian.define.broadastreceiver"/> </intent-filter> </receiver>
最后,发送广播
package com.zhoujian.broadcastreceiver.activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import com.zhoujian.broadcastreceiver.R;import butterknife.ButterKnife;import butterknife.InjectView;public class MainActivity extends AppCompatActivity { @InjectView(R.id.bt_send) Button mBtSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); clickEvent(); } private void clickEvent() { mBtSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); //设置Action intent.setAction("zhoujian.define.broadastreceiver"); intent.putExtra("msg","广播来啦!"); //发送广播 sendBroadcast(intent); } }); }}
运行截图:
有序广播
对于有序广播,系统会根据优先级别顺序逐个执行接受者,优先接受到广播的接受者可以终止广播,如果前面的广播终止了,后面就无法收到广播了。优先收到广播的接受者可以通过setResaultExtras(Bundle)方法将处理结果放入广播中,然后传递给下一个接受者。
首先,定义广播MyReceiver.java和SecondReceiver.java
package com.zhoujian.broadcastreceiver.receiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;/** * Created by zhoujian on 2016/12/27. */public class MyReceiver extends BroadcastReceiver{ private String mMsg; @Override public void onReceive(Context context, Intent intent) { //注意此方法内部不能做耗时操作,容易引起ANR if (intent.getAction().equals("zhoujian.define.broadastreceiver")) { mMsg = intent.getStringExtra("msg"); Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show(); Bundle bundle = new Bundle(); bundle.putString("message","我是第一个广播存入的消息"); setResultExtras(bundle); } }}
package com.zhoujian.broadcastreceiver.receiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;/** * Created by zhoujian on 2016/12/27. */public class SecondReceiver extends BroadcastReceiver{ private String mMsg; @Override public void onReceive(Context context, Intent intent) { //注意此方法内部不能做耗时操作,容易引起ANR if (intent.getAction().equals("zhoujian.define.broadastreceiver")) { Bundle bundle = getResultExtras(true); mMsg = bundle.getString("message"); Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show(); } }}
其次,在清单文件中静态注册广播
<receiver android:name=".receiver.MyReceiver"> <!--指定广播的优先级 范围是-1000到1000--> <intent-filter android:priority="200"> <!--指定广播所响应的Action--> <action android:name="zhoujian.define.broadastreceiver"/> </intent-filter> </receiver> <receiver android:name=".receiver.SecondReceiver"> <!--指定广播的优先级 范围是-1000到1000--> <intent-filter android:priority="100"> <!--指定广播所响应的Action--> <action android:name="zhoujian.define.broadastreceiver"/> </intent-filter> </receiver>
最后,发送广播
package com.zhoujian.broadcastreceiver.activity;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import com.zhoujian.broadcastreceiver.R;import butterknife.ButterKnife;import butterknife.InjectView;public class MainActivity extends AppCompatActivity { @InjectView(R.id.bt_send) Button mBtSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); clickEvent(); } private void clickEvent() { mBtSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); //设置Action intent.setAction("zhoujian.define.broadastreceiver"); intent.putExtra("msg","广播来啦!"); //发送有序广播 sendOrderedBroadcast(intent,null); } }); }}
运行截图:
2.源码下载
源码下载:https://github.com/zeke123/BroadcastReceiver
0 0
- Android的广播(BroadcastReceiver)
- Android广播BroadcastReceiver的ACTION
- Android-BroadcastReceiver广播的用法
- android broadcastReceiver 常用的广播
- BroadcastReceiver Android的广播解析
- android BroadcastReceiver广播接受器的使用
- android----广播(BroadcastReceiver)的用法
- 一个简单的Android BroadcastReceiver 广播实例
- BroadCastReceiver android 广播接收器
- android 广播接收者--BroadcastReceiver
- android 广播接收者--BroadcastReceiver
- Android广播BroadcastReceiver
- android 广播 BroadcastReceiver
- Android 广播接收者--BroadcastReceiver
- android 广播(broadcastReceiver)详解
- Android广播BroadcastReceiver
- Android广播机制(BroadcastReceiver)
- Android广播BroadcastReceiver
- Linux内核中的seq操作
- 【总结】升级Xcode8遇到的问题及解决方案!!!
- Excel单元格下拉框引用其它Sheet中的值的方法
- Java中类的属性不体现多态性
- 2017年深度学习十大趋势预测
- Android的广播(BroadcastReceiver)
- PageOffice在java中的应用
- c# asp.net excel导出 80070005 拒绝访问
- 自定义View之TextView的闪动效果
- MMU用法
- redis 基本操作
- 深度学习框架Caffe源码解析
- C++学习笔记
- grails框架入门小结(三)—Maven+Git+Dubbo+Zookeeper