Android笔记三十三.BroadcastReceiver使用
BroadcastReceiver本质上是一种全局监听器。用于监听系统全局的广播消息并接收指定的广播,因此它能够很方便地实现系统中不同组件之间的通信。例如以下为BroadcastReceiver知识点结构:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="478" height="233" alt="" style="background-color:inherit; display:inline-block; margin-top:8px; height:233.1447661469933px; width:478px">
intent):用于发送普通广播。当中intent參数表示接收该广播的广播接收者所须要满足的条件,以及广播所传递的数据;
但缺点是接收者不能将处理结果传递给下一个接收者。而且无法终止Broadcast
Intent的传播。
有序广播接收者能够终止广播的传播(通过调用abortBroadcast()方法)。广播的传播一旦终止,后面的接收者就无法接收到广播。另外,广播的接收者能够将数据传递给下一个接收者(通过setResultExtras(Bundle
bundle)方法)。
三、BroadcastReceiver应用开发步骤
实现一个继承于BroadcastReceiver基类的子类,并实现里面的onReceiver()方法;
- public class MyBroadcastReceiver extends BroadcastReceiver
- {
- public void onReceiver(Context context,Intent intent){
- }
- }
intent)或sendOrderedBroadcast(Intent intent, String receiverPermission)发送广播。
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter>
- <action
- android:name = "com.jiangdongguo.android.myBroadcastReceover">
- <action/>
- </intent-filter>
- </receiver>
- MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
- IntentFilter filter = new IntentFilter("com.jiangdongguo.android.myBroadcastReceover"); //指定接收哪个广播
- registerReceiver(BroadcastReceiver receiver。IntentFilter filter)方法进行注冊
注冊完毕后。就可以接收相应的广播消息。一旦广播(Broadcast)事件发生后,系统就会创建相应的BroadcastRecevier实例,并自己主动触发它的onReceiver()方法,onReceiver()方法运行后,BroadcastReceiver的实例就会被销毁。
三、源代码实战
- package com.example.mybroadcast;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.widget.Toast;
- /*BroadcastReceiver子类
- * 用于接收指定发送广播*/
- public class MyBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context arg0, Intent arg1) {
- Toast.makeText(arg0, "我是BroadcastReceiver,我已经接收到发送的广播。", Toast.LENGTH_SHORT).show();
- }
- }
- package com.example.mybroadcast;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class MainActivity extends Activity {
- private Button sendBroad;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- /*1.广播接收器注冊方式二:注冊一个广播接收器*/
- MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
- IntentFilter filter = new IntentFilter("com.jiangdongguo.Android.BroadcastReceiver");
- registerReceiver(myBroadcastReceiver,filter);
- sendBroad = (Button)findViewById(R.id.send);
- sendBroad.setOnClickListener(new OnClickListener(){
- public void onClick(View v) {
- /*2.发送一个广播,并指明其action属性*/
- //a.指明该广播的action属性
- Intent intent = new Intent("com.jiangdongguo.Android.BroadcastReceiver");
- //b.发送广播
- sendBroadcast(intent);
- }
- });
- }
- }
- <?xml version="1.0" encoding="utf-8"?
>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.mybroadcast"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="14" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <!--广播接收器注冊方式一: 接收的哪一个广播-->
- <!-- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter >
- <action android:name="com.jiangdongguo.Android.BroadcastReceiver"/>
- </intent-filter>
- </receiver> -->
- </application>
- </manifest>
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYzNzUwMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="605" height="407" alt="" style="background-color:inherit; display:inline-block; margin-top:8px; width:605.4336099585063px; height:407px">
这样就可能导致BroadcastReceiver启动的子线程不能运行完毕。
最新文章
- nginx代理TCP端口
- poj1753 Flip Game
- Solr使用随笔
- MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(02)
- _.属性和self.属性,我遇到的那些坑
- Bootloader的原理以及实现(转载)
- 通过Roslyn构建自己的C#脚本
- linux mount命令学习
- Grunt 插件开发与调式
- Number,parseInt,parseFloat函数
- Course3-Python文件I/O
- winform 写入txt(可以连续性的在文本内容后面追加)
- 实验二Java面向对象程序设计_20135129李畅宇
- ActiveMQ学习笔记1
- PLSQL Developer
- word2vec训练好的词向量
- Java-Runoob-高级教程-实例-方法:04. Java 实例 – 斐波那契数列
- Android 4.4 Kitkat Phone工作流程浅析(八)__Phone状态分析
- [leetcode]Simplify Path @ Python
- Android蓝牙BLE低功耗相关简单总结
热门文章
- 用jquery ajax做的select菜单,选中的效果
- html5开发手机打电话发短信功能,html5的高级开发,html5开发大全,html手机电话短信功能具体解释
- Redis命令-HyperLogLog
- 一个JavaWeb项目中使用的部分技术
- 英语发音规则---X字母
- hdoj--1495--非常可乐(搜索+隐式图)
- DB-MySQL:MySQL NULL 值处理
- 剑指offer——05用两个栈实现队列(Python3)
- MongoDB在MacOS上的客户端Robo 3T 的简单使用(二)
- How to include custom library into maven local repository?--转