BroadcastReceiver广播接收者(六)——粘性广播(StickyBroadcast)使用示例

简介: MainActivity如下: package cc.com;import android.os.Bundle;import android.

MainActivity如下:

package cc.com;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
/**
 * Demo描述:
 * 粘性广播(StickyBroadcast)使用示例
 * 粘性广播也叫等待广播.
 * 
 * 使用场景:
 * 发送一个粘性广播(StickyBroadcast),但是现在并没有一个广播接收者来接收该广播发出的数据.
 * 而是在某个时间后,才注册一个receiver,但是也能收到之前StickyBroadcast发出的广播.
 * 这点就和平常用的普通广播很不一样了.
 * 
 * 在该示例中:
 * 1 发出一个粘性广播(StickyBroadcast)
 * 2 5秒后再启动一个Activity
 * 3 在新启动的Activity中注册receiver接收StickyBroadcast发出的数据
 * 
 * 参考资料:
 * 1 http://blog.csdn.net/lamp_zy/article/details/9324979
 * 2 http://blog.csdn.net/woaieillen/article/details/7376391
 * 
 * 注意权限:
 * <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
 */
public class MainActivity extends Activity {
    private Context mContext;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mContext=this;
		sendStickyBroadcastTest();
		startAnotherActivity();
	}

	//发送粘性广播
	private void sendStickyBroadcastTest() {
		Intent intent=new Intent();
		intent.setAction("cc.vv");
		intent.putExtra("time", String.valueOf(System.currentTimeMillis()));
        sendStickyBroadcast(intent);
	}

	// 启动其他Activity
	private void startAnotherActivity() {
		new Thread() {
			public void run() {
				try {
					Thread.sleep(1000*5);
					Intent intent=new Intent(mContext, AnotherActivity.class);
					mContext.startActivity(intent);
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
		}.start();

	}

}

AnotherActivity如下:
package cc.com;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class AnotherActivity extends Activity {
    private BroadcastReceiver mBroadcastReceiver=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.another);
		registBroadcastReceiver();
	}

	//注册广播接收者
	private void registBroadcastReceiver(){
		mBroadcastReceiver=new BroadcastReceiver() {
			@Override
			public void onReceive(Context context, Intent intent) {
				System.out.println("收到了StickyBroadcast发出的数据");
				String time=intent.getStringExtra("time");
				System.out.println("发送广播的时间:"+time);
				System.out.println("当前的时间:"+System.currentTimeMillis());
			}
		};
		IntentFilter intentFilter=new IntentFilter();
		intentFilter.addAction("cc.vv");
		registerReceiver(mBroadcastReceiver, intentFilter);
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		if (mBroadcastReceiver!=null) {
			unregisterReceiver(mBroadcastReceiver);
		}
	}

}


PS:两个界面布局简单得令人发指,所以不再贴出。

PPS:在电量变化的时候系统也会发出sticky广播;参考资料:http://blog.csdn.net/jaysong2012/article/details/45601001


相关文章
|
7月前
|
监控 安全 Cloud Native
企业网络架构安全持续增强框架
企业网络架构安全评估与防护体系构建需采用分层防御、动态适应、主动治理的方法。通过系统化的实施框架,涵盖分层安全架构(核心、基础、边界、终端、治理层)和动态安全能力集成(持续监控、自动化响应、自适应防护)。关键步骤包括系统性风险评估、零信任网络重构、纵深防御技术选型及云原生安全集成。最终形成韧性安全架构,实现从被动防御到主动免疫的转变,确保安全投入与业务创新的平衡。
|
11月前
|
Java 程序员 PHP
01 入门PHP就来我这-安装phpstudy
路老师的PHP入门教程,带你从零开始学习PHP。首先下载并安装phpStudy,接着配置域名和端口,最后创建并运行第一个PHP文件。内容详实,适合初学者。
206 3
01 入门PHP就来我这-安装phpstudy
|
Web App开发 小程序 Android开发
Appium微信小程序自动化环境准备
Appium微信小程序自动化环境准备
516 1
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
1246 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
Prometheus 监控 Cloud Native
Grafana下拉框选择不同环境
Grafana下拉框选择不同环境
399 0
Grafana下拉框选择不同环境
|
Android开发 开发者 UED
使用AlarmManager实现Android应用中的定时任务
使用AlarmManager实现Android应用中的定时任务
|
Kubernetes Cloud Native Dubbo
Higress 开源后,我们整理了开发者最关心的 15 个问题
云原生网关 Higress 开源后,引起了开发者们的热烈讨论,我们整理了大家在 GitHub、钉群、微信群讨论的问题,并将回答汇总如下,方便各位更准确的读懂 Higress,也非常欢迎您和我们一起共建、定义 Higress。
472 85
Higress 开源后,我们整理了开发者最关心的 15 个问题
|
消息中间件 编解码 算法
RocketMQ msgId生成算法
RocketMQ msgId生成算法
463 0
RocketMQ msgId生成算法
|
XML druid Java
Spring | 数据源对象 properties文件 创建容器和获取bean 容器总结
Spring | 数据源对象 properties文件 创建容器和获取bean 容器总结
311 0
|
开发框架 JavaScript 前端开发
理解iOS端的WebView同层组件
同层组件的目标是将原生组件渲染在与其他Web组件同一层级中。在iOS中,我们使用WKWebView来创建Web视图,WKWebView在进行解析渲染时,会将Web组件渲染到WKCompositingView上,这个View是一个原生的UIView子类,通常WKWebView内核会将多个组件共同渲染到同一个WKCompositingView上,但是如果某个HTML标签的style设置了overflow: scroll属性,并且内容超出容器的大小,WKWebView就会为其单独的创建一个WKChildScrollView,因此如果我们可以找到这个View,并和对应的Web组件一一关联起来,就可以将
1593 0