博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义BroadcastReceiver
阅读量:6088 次
发布时间:2019-06-20

本文共 3549 字,大约阅读时间需要 11 分钟。

hot3.png

1.如何创建一个自定义广播

package com.example.broadcastreceiver01;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.app.Activity;import android.content.Intent;public class MainActivity extends Activity {		//1.定义一个Action常量	private static final String MY_ACTION = "MY_BROADCAST_ACTION";	private Button mButton;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				mButton = (Button)findViewById(R.id.button1);		mButton.setOnClickListener(new OnClickListener(){			@Override			public void onClick(View v) {				//2.实例化Intent对象				Intent intent = new Intent();				//3.设置Intent Action属性				intent.setAction(MY_ACTION);				//4.为Intent 添加附加信息				intent.putExtra("msg", "小喇叭开始广播啦~");				//5.发出广播				sendBroadcast(intent);			}});	}}

布局文件中只有一个按钮这里就不贴出来了

2.如何接受广播

创建自定义类,然后继承BroadcastReceiver

package com.example.broadcastreceiver01;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class MyReceiver extends BroadcastReceiver {	@Override	public void onReceive(Context arg0, Intent arg1) {		String m = arg1.getStringExtra("msg");		Toast.makeText(arg0, m, Toast.LENGTH_SHORT).show();	}}

创建完接收器后,还需要在AndroidManifest.xml中声明广播接收器

过滤器中action 的名字 就是前面定义的常量,用来声明MyReceiver自定义接收器用来接收哪个广播

*在AndroidManifest中注册的广播接收器,即使程序退出也会接受到广播。可以通过代码来注册和注销广播接收器,控制何时打开或关闭广播。

点击按钮发出广播,然后接收器接收后显示信息

下面来用代码注册和注销一个广播接收器,修改上面的代码,在布局文件中添加两个按钮,一个用来注册一个用来注销,TextView用来显示当前接收器的状态

因为是修改上面的代码,所以不能忘了把在AndroidManifest.xml中的receiver标签去掉

布局文件:

package com.example.broadcastreceiver01;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;public class MainActivity extends Activity {	// 1.定义一个Action常量	private static final String MY_ACTION = "MY_BROADCAST_ACTION";	private Button mButton, btnRegister, btnUnRegister;	private MyReceiver mReceiver;	private TextView mTextView;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		mTextView = (TextView) findViewById(R.id.textView1);		mTextView.setText("广播接收器已关闭");		// 注册接收器		btnRegister = (Button) findViewById(R.id.button2);		btnRegister.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				IntentFilter filter = new IntentFilter();				// 添加要接收广播的action				filter.addAction(MY_ACTION);				mReceiver = new MyReceiver();				registerReceiver(mReceiver, filter);				mTextView.setText("广播接收器已开启");			}		});		// 注销接收器		btnUnRegister = (Button) findViewById(R.id.button3);		btnUnRegister.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				unregisterReceiver(mReceiver);				mTextView.setText("广播接收器已关闭");			}		});		mButton = (Button) findViewById(R.id.button1);		mButton.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				// 2.实例化Intent对象				Intent intent = new Intent();				// 3.设置Intent Action属性				intent.setAction(MY_ACTION);				// 4.为Intent 添加附加信息				intent.putExtra("msg", "小喇叭开始广播啦~");				// 5.发出广播				sendBroadcast(intent);			}		});	}}

当没有注册广播接收器是,发出广播是接收不到的

开启后,就能接收到了。

转载于:https://my.oschina.net/guoqiantong/blog/115551

你可能感兴趣的文章
分数的表示以及计算(c++)
查看>>
【技术性】Software engineering知识
查看>>
Python爬虫笔记3-解析库Xpath的使用
查看>>
敏捷 - #3 原则:经常提供工作软件 ( #3 Agile - Principle)
查看>>
222. Count Complete Tree Nodes
查看>>
Nervos CKB 共识协议 NC-Max:突破 Nakamoto Consensus 吞吐量的极限
查看>>
一行js代码识别Selenium+Webdriver及其应对方案
查看>>
ubuntu 设置root用户密码并实现root用户登录
查看>>
UITableView性能优化 - 中级篇
查看>>
前端常用网站及论坛集锦
查看>>
Element组件引发的Vue中mixins使用,写出高复用组件
查看>>
JavaScript闯关笔记
查看>>
js类型转换的各种玩法
查看>>
换个姿势学数学:函数『奇偶性』的由来
查看>>
seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
查看>>
dubbo源码解析(三十一)远程调用——rmi协议
查看>>
JS每日一题:Vue中的diff算法?
查看>>
小李飞刀:SQL题目第二弹!
查看>>
LeetCode-数组-三数之和
查看>>
手把手教你造一个基于React的markdown编辑器
查看>>