这里笔者就不重复书籍上面的话了,作者的表达十分凝练和清晰,主要说下笔者自己的感悟。学习到这里的时候笔者认为广播的存在就是打破显式intent传播的局限性,显式intent只能Activity之间互相传递,肯定是不满足我们的需求的。如果想要系统和APP,或者一个APP和另一个APP,甚至一个APP中不是简单的跳转关系都可以使用广播。例如本例中,强制下线这个功能不是某一个Activity和LoginActivity之间的传递,而是任何一个Activity触发这个功能都需要跳转到LoginActivity,我们当然不能给每个Activity写个actionStart,所以我们就提前设置好接收广播后的操作,就是跳转到LoginActivity,在需要的时候发送这条广播。其实不难发现广播和intent之间联系紧密。废话不多说,让我们来看看这个项目吧。
这里笔者是看了一遍书,然后自己敲的,遇到不会的再去看看书。所以和书籍上面有的命名不太一致,其实也比较推荐大家使用这种方法,而不是盲目的对着敲。
第一步:回顾
因为需要退出所有程序,所以大家一起回顾下第二章活动最佳实践的BaActivity和ActivityCollection。这里就不废话了
第二步:登录界面
画个这样的页面,书上说是自动生成,还是别了,因为现在的AS和书上的版本已经差挺多的了,生成出来一大堆没有用的。
第三步:修改LoginActivity
btn.tOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { 民族英烈的故事 String urname = accountEdit.getText().toString(); String password = passwordEdit.getText().toString(); if (urname.equals("admin") && password.equals("123456")) { Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); }el { Toast.makeText(LoginActivity.this, "账号密码错误!", Toast.LENGTH_SHORT).show(); } } });
其他的不说了,点击登录按钮后,首先获取EditText的内容,然后赋值给urname和password。之后就是一个判断,如果用户名是admin并且密码是123456的话,跳转到主页面,如果不是弹出一个Toast。
第四步:编辑主页面和修改MainActivity
public class MainActivity extends BaActivity { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tContentView(R.layout.activity_main); btn = findViewById(R.id.btn); btn.tOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("com.firstcode.broadcasttestpractice.FORCE_OFFLINE"); ndBroadcast(intent); 考试失败 } }); }}
很简单,就是点击发送一个广播。
第五步:接收广播
既然发出来,就一定要接收,怎么接收呢?在BaActivity中添加下面的代码
private offlineBr助理物流师考试oadcastReceiver receiver;... @Override protected void onResume() { super.onResume(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.firstcode.broadcasttest服装厂招工启事practice.FORCE_OFFLINE"); receiver = new offlineBroadcastReceiver(); registerReceiver(receiver, intentFilter); } @Override protected void onPau() { super.onPau(); if (receiver != null) { unregisterReceiver(receiver); receiver = null; } }... class offlineBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.tTitle("Warning"); builder.tMessage("You are forced to be offline. Plea try to login again"); builder.tCancelable(fal); builder.tPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCollection.finishAll(); Intent intent1 = new Intent(context, LoginActivity.class); context.startActivity(intent1); } }); builder.show(); } }
和之前的动态注册都是差不多的,首先声明一个内部类,重写onReceive方法,该方法内就是接收到广播后的操作。本案例中是弹出了一个AlertDialog对话框。并且设置不能取消,同时添加一个按钮,这个按钮的功能就是关闭所有Activity,然后再跳转回LoginActivity。然后在Activity的声明周期中的resume注册这个2013湖北高考分数线接收器,在pau的时候取消注册。
本文地址:https://blog.csdn.net/SafeVidulInfo/article/details/107551031
本文发布于:2023-04-04 00:49:32,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/9f9fb860d597c7e55285a4872a4a1228.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:《第一行代码》阅读笔记(十九)——广播的最佳实践(强制下线功能).doc
本文 PDF 下载地址:《第一行代码》阅读笔记(十九)——广播的最佳实践(强制下线功能).pdf
留言与评论(共有 0 条评论) |