各位老铁们,大家好,今天由我来为大家分享深入解析:Android 系统广播接收器工作原理与应用技巧,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
//可以通过setPriority()设置动态广播的优先级,优先级范围为-1000到1000
//注意,静态注册的广播比动态注册的广播要快,无论动态注册的优先级设置多高,无论静态注册的优先级设置多低
过滤器.setPriority(1000);
//第一步注册广播
registerReceiver(dynamicBroadReceive, 过滤器);
//第二部分,发送广播
意图intent=new Intent();
intent.setAction("linus.dynamicBroadReceive");
intent.putExtra("名称","linus-dynamic");
发送广播(意图);
}
});
创建自定义广播并创建新的DynamicBroadReceive.java
公共类DynamicBroadReceive 扩展BroadcastReceiver {
@覆盖
公共无效onReceive(上下文上下文,意图意图){
//第3部分,接收广播
字符串名称=intent.getExtras().getString("名称");
Toast.makeText(context,"动态注册广播后,收到的名称为"+name,Toast.LENGTH_SHORT).show();
}
}
动态注册广播,最后必须取消注册广播
@覆盖
受保护无效onDestroy() {
super.onDestroy();
取消注册接收器(dynamicBroadReceive);
}
(4) 下面以本地广播为例。本地广播无法通过静态注册完成广播注册。因为当广播到来时,应用程序会在某个时间启动。本地广播一般通过LocalBroadcastManager进行管理
btn3.setOnClickListener(new View.OnClickListener() {
@覆盖
公共无效onClick(查看视图){
localBroadcastManager=LocalBroadcastManager.getInstance(getBaseContext());
localBroadReceive=new LocalBroadReceive();
过滤器=新的IntentFilter();
filter.addAction("linus.localBroadReceive");
localBroadcastManager.registerReceiver(localBroadReceive,filter);
意图intent=new Intent();
intent.setAction("linus.localBroadReceive");
Intent.putExtra("名称","linus-local");
localBroadcastManager.sendBroadcast(意图);
}
});
创建本地广播接收器并创建LocalBroadReceive.java
公共类LocalBroadReceive 扩展BroadcastReceiver {
@覆盖
公共无效onReceive(上下文上下文,意图意图){
字符串名称=intent.getExtras().getString("名称");
Toast.makeText(context,"本地广播收到的名字是"+name,Toast.LENGTH_SHORT).show();
}
}
当本地广播结束后,您还需要退出广播。
@覆盖
受保护无效onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(localBroadReceive);
}
(5)有序广播是指按照广播的优先级进行广播。不同的应用程序以不同的顺序接收广播。同时,先接收到广播的应用程序可以将数据传递给后来接收到的广播。这里不再举例。
为了大家的实际测试,我将整个demo的源码分享出来。
MainActivity.java
包linuszhao.js.one.jsbroadcast;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.support.v4.content.LocalBroadcastManager;
导入android.support.v7.app.AppCompatActivity;
导入android.os.Bundle;
导入android.view.View;
导入android.widget.Button;
公共类MainActivity 扩展AppCompatActivity {
私有按钮btn1、btn2、btn3;
//定义意图过滤器
私有IntentFilter过滤器;
//定义广播接收者
DynamicBroadReceive 动态BroadReceive;
LocalBroadReceive 本地BroadReceive;
私有LocalBroadcastManager localBroadcastManager;
@覆盖
protected void onCreate(Bundle savingInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(按钮) findViewById(R.id.btn1);
btn2=(按钮) findViewById(R.id.btn2);
btn3=(按钮) findViewById(R.id.btn3);
btn1.setOnClickListener(new View.OnClickListener() {
@覆盖
公共无效onClick(查看视图){
意图intent=new Intent();
intent.setAction("linus.diyBroadReceive");
Intent.putExtra("名称", "linus");
发送广播(意图);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@覆盖
公共无效onClick(查看视图){
//实例化广播接收器
DynamicBroadReceive=new DynamicBroadReceive();
//实例化意图过滤器
过滤器=新的IntentFilter();
//为过滤器添加定义的广播。当然,你也可以在这里填写系统广播。
filter.addAction("linus.dynamicBroadReceive");
//可以通过setPriority()设置动态广播的优先级,优先级范围为-1000到1000
//注意,静态注册的广播比动态注册的广播要快,无论动态注册的优先级设置多高,无论静态注册的优先级设置多低
过滤器.setPriority(1000);
//注册广播
registerReceiver(dynamicBroadReceive, 过滤器);
意图intent=new Intent();
intent.setAction("linus.dynamicBroadReceive");
intent.putExtra("名称","linus-dynamic");
发送广播(意图);
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@覆盖
公共无效onClick(查看视图){
localBroadcastManager=LocalBroadcastManager.getInstance(getBaseContext());
localBroadReceive=new LocalBroadReceive();
过滤器=新的IntentFilter();
filter.addAction("linus.localBroadReceive");
localBroadcastManager.registerReceiver(localBroadReceive,filter);
意图intent=new Intent();
intent.setAction("linus.localBroadReceive");
Intent.putExtra("名称","linus-local");
localBroadcastManager.sendBroadcast(意图);
}
});
}
@覆盖
受保护无效onDestroy() {
super.onDestroy();
取消注册接收器(dynamicBroadReceive);
localBroadcastManager.unregisterReceiver(localBroadReceive);
}}
活动主文件
?xml 版本="1.0"编码="utf-8"?
http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="linuszhao.js.one.jsbroadcast.MainActivity"
android:orientation="垂直"
Androidmanifest.xml
?xml 版本="1.0"编码="utf-8"?
http://schemas.android.com/apk/res/android"
package="linuszhao.js.one.jsbroadcast"
//注册广播接收器,监听开机广播//使用android:name指定注册哪个广播接收器//注册广播接收器//使用android:name指定注册哪个广播接收器。您可以在此处任意指定名称。
DiyBroadReceive.java
包linuszhao.js.one.jsbroadcast;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.widget.Toast;
/**
由linus 创建于2017 年3 月5 日。
*/
公共类DiyBroadReceive 扩展BroadcastReceiver {
@覆盖
公共无效onReceive(上下文上下文,意图意图){
字符串名称=intent.getExtras().getString("名称");
Toast.makeText(context,"自定义广播接收器收到的名称为"+name,Toast.LENGTH_SHORT).show();
}
}
MyBroadcastReceive.java
包linuszhao.js.one.jsbroadcast;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.widget.Toast;
/**
由linus 创建于2017 年3 月5 日。
*/
公共类MyBroadcastReceive 扩展BroadcastReceiver {
@覆盖
公共无效onReceive(上下文上下文,意图意图){
Toast.makeText(context,"开机时启动",Toast.LENGTH_LONG).show();
}
}
动态BroadReceive.java
包linuszhao.js.one.jsbroadcast;导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.widget.Toast;
/**
由linus 创建于2017 年3 月5 日。
*/
公共类DynamicBroadReceive 扩展BroadcastReceiver {
@覆盖
公共无效onReceive(上下文上下文,意图意图){
字符串名称=intent.getExtras().getString("名称");
Toast.makeText(context,"动态注册广播后,收到的名称为"+name,Toast.LENGTH_SHORT).show();
}
}
LocalBroadReceive.java
包linuszhao.js.one.jsbroadcast;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.widget.Toast;
深入解析:Android 系统广播接收器工作原理与应用技巧和的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
【深入解析:Android 系统广播接收器工作原理与应用技巧】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章终于来了!我一直想理解 Android 的广播机制。
有16位网友表示赞同!
好详细的文章,讲解很透彻,让我对广播接收器的用法有了更深层的认识。
有14位网友表示赞同!
广播接收器是 Android 开发中必不可少的知识点啊,感谢分享这么好的教程。
有19位网友表示赞同!
终于找到一篇能够很好解释广播接收器的文章,以前一直找了很多没看明白的介绍。
有11位网友表示赞同!
感觉这篇文章写的逻辑很清晰,一步步来讲解,理解非常容易。
有14位网友表示赞同!
现在 Android 的知识点越来越多,学习起来确实不容易,幸好有这样的文章帮我梳理思路。
有19位网友表示赞同!
希望以后还能看到更多关于 Android 方面的详细教程,这样可以帮助我更好地学习和实践。
有13位网友表示赞同!
看完这篇文章感觉对广播接收器的应用场景有了更好的理解。
有16位网友表示赞同!
原来广播接收器这么强大!之前只知道简单的用法,没想到还有这么多种应用方式。
有14位网友表示赞同!
这个教程太棒了,帮我解决了几个关于广播接收器的疑惑!
有14位网友表示赞同!
文章内容非常丰富,涵盖了广播接收器的各种细节,很棒!
有6位网友表示赞同!
学习 Android 的时候一直遇到广播接收器的问题,看了这篇讲解感觉真的太有帮助了。
有12位网友表示赞同!
要实现一些特定功能,好像都需要用到广播接收器吧? 现在有了这篇文章就更轻松啦。
有6位网友表示赞同!
分享这样的好文章真的很有价值,希望更多人能够看到!
有12位网友表示赞同!
学习 Android 真是一段奇妙的旅程,感谢有这样优质的教程!
有10位网友表示赞同!
终于理解了广播接收器的原理和流程了,感觉自己进步不少。
有5位网友表示赞同!
这篇讲解非常适合入门者学习广播接收器,内容简单易懂。
有20位网友表示赞同!