Android ARouter拦截器 📅 发布时间:2026/7/5 15:16:34 👁️ 浏览次数: 修改下之前的demo测试下ARouter拦截器。页面如下未登录状态点击下面红色按钮跳转登录页面输入一个名字点击登录按钮跳转到下面用户中心页面回到首页点击退出登录重新点击最下面按钮直接跳转到用户中心页面ok. 代码如下在业务模块新增LoginActivitypackage com.example.module_2; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.alibaba.android.arouter.facade.annotation.Autowired; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.android.arouter.launcher.ARouter; import com.example.common.LoginService; import com.example.module_2.R; /** * 登录页面 */ Route(path /login/login) public class LoginActivity extends AppCompatActivity { Autowired(name goto_path) String gotoPath; // 登录成功后要跳转的路径 private EditText etUsername; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 注入参数 ARouter.getInstance().inject(this); // 创建简单的 UI LinearLayout layout new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); layout.setPadding(50, 100, 50, 100); etUsername new EditText(this); etUsername.setHint(请输入用户名); etUsername.setTextSize(16); Button btnLogin new Button(this); btnLogin.setText(登录); btnLogin.setTextSize(16); btnLogin.setPadding(20, 30, 20, 30); layout.addView(etUsername); layout.addView(btnLogin); setContentView(layout); // 设置登录按钮点击事件 btnLogin.setOnClickListener(v - { String username etUsername.getText().toString().trim(); if (username.isEmpty()) { Toast.makeText(this, 请输入用户名, Toast.LENGTH_SHORT).show(); return; } // 执行登录 LoginService.login(username); Toast.makeText(this, 登录成功欢迎 username, Toast.LENGTH_LONG).show(); if (gotoPath ! null) { ARouter.getInstance().build(gotoPath).navigation(); // 跳转到目标页面 finish(); } else { finish(); } }); } }个人中心页面package com.example.module_2; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import com.alibaba.android.arouter.facade.annotation.Route; import com.example.common.LoginService; /** * 需要登录才能访问的页面 * * 路径以 /needlogin/ 开头会被 LoginInterceptor 拦截检查 */ Route(path /needlogin/personal) public class PersonalCenterActivity extends AppCompatActivity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView new TextView(this); textView.setText(String.format(个人中心页面\n\n %s, LoginService.getUsername())); textView.setTextSize(18); textView.setPadding(50, 100, 50, 100); setContentView(textView); } }拦截器也写在该业务模块如下package com.example.module_2.interceptor; import android.content.Context; import android.util.Log; import com.alibaba.android.arouter.facade.Postcard; import com.alibaba.android.arouter.facade.annotation.Interceptor; import com.alibaba.android.arouter.facade.callback.InterceptorCallback; import com.alibaba.android.arouter.launcher.ARouter; /** * 日志记录拦截器 * * 作用记录所有路由跳转的详细信息调试用 * * 优先级数字小的优先级高先执行 */ Interceptor(priority -1, name 日志记录拦截器) public class LoggerInterceptor implements com.alibaba.android.arouter.facade.template.IInterceptor { private static final String TAG ARouter-Logger; Override public void process(Postcard postcard, InterceptorCallback callback) { // 记录路由信息 Log.d(TAG, ); Log.d(TAG, 路由跳转开始); Log.d(TAG, 目标路径 postcard.getPath()); // 打印所有参数 if (postcard.getExtras() ! null !postcard.getExtras().isEmpty()) { Log.d(TAG, 携带参数:); for (String key : postcard.getExtras().keySet()) { Object value postcard.getExtras().get(key); Log.d(TAG, key value); } } else { Log.d(TAG, 无参数); } // 继续处理传递自定义回调 callback.onContinue(postcard); // 交给下一个拦截器处理 } Override public void init(Context context) { Log.d(TAG, LoggerInterceptor 初始化完成); } }package com.example.module_2.interceptor; import android.content.Context; import android.util.Log; import android.widget.Toast; import com.alibaba.android.arouter.facade.Postcard; import com.alibaba.android.arouter.facade.annotation.Interceptor; import com.alibaba.android.arouter.facade.callback.InterceptorCallback; import com.alibaba.android.arouter.launcher.ARouter; import com.example.common.LoginService; /** * 登录检查拦截器 * * 作用拦截所有需要登录的页面如果未登录则跳转到登录页 * */ Interceptor(priority 1, name 登录检查拦截器) public class LoginInterceptor implements com.alibaba.android.arouter.facade.template.IInterceptor { private static final String TAG LoginInterceptor; private Context context; Override public void process(Postcard postcard, InterceptorCallback callback) { Log.d(TAG, LoginInterceptor 开始处理。 \n 嘿嘿); // 获取目标路径 String path postcard.getPath(); // 只拦截特定路径以 /needlogin/ 开头的路径都需要登录 if (path ! null path.startsWith(/needlogin/)) { Log.d(TAG, 检测到需要登录的路径 path); // 检查是否已登录 if (!LoginService.isLogin()) { Log.d(TAG, 用户未登录准备跳转到登录页); // 保存原始请求信息 // postcard.withString(goto_path, path); // 和47行路由传参一样调用一处就行。 // 重定向到登录页 ARouter.getInstance() .build(/login/login) .withString(goto_path, path) .navigation(); // 中断路由流程 callback.onInterrupt(new RuntimeException(请先登录哈)); // 显示提示信息 if (context ! null) { Toast.makeText(context, 请先登录哦, Toast.LENGTH_SHORT).show(); } return; } else { Log.d(TAG, 用户已登录允许通过); } } else { Log.d(TAG, 该路径不需要登录验证 path); } // 继续处理下一个拦截器或目标页面 callback.onContinue(postcard); } Override public void init(Context context) { this.context context; Log.d(TAG, LoginInterceptor 初始化完成); } }主模块注册业务模块的activity主页MainActivity关键代码测试需要校验登录的页面即个人中心页面// 测试拦截器 - 访问需要登录的页面 View btnNeedLogin findViewById(R.id.btnNeedLogin); if (btnNeedLogin ! null) { btnNeedLogin.setOnClickListener(v - { Log.d(MainActivity, 准备访问需要登录的页面); ARouter.getInstance() .build(/needlogin/personal) .navigation(); }); }ok. 看下未登录时点击跳转个人中心拦截器日志ok. 日志拦截器先打印了路由信息。然后登录拦截器校验了未登录重定向到登录页面。然后登录页面登录成功跳转个人中心的时候拦截器日志如下ok. 这次允许通过成功跳转到个人中心页面。ok. 拦截器挺有用。能用于实现一些公共功能。
帛书《周易》“屯”象不是《易经》“屯”卦 屯象 一、象名与雹栖八象结构实际运用 象名:屯造字本义:甲骨文像种子萌芽破土之形,描绘事物初生、艰难萌芽的状态核心含义:事物刚开始发展阶段,此时能量微弱、根基不稳,必须小心谨慎、猥琐发育,… 2026/7/4 1:17:40
微信小程序 python+AI 加油站管理系统_48z9a8ih 目录技术栈选择系统模块设计开发阶段划分部署方案关键注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Python搭配Flask/Django框架,前端使用微信小程序原生开发… 2026/7/4 14:04:44
计算机毕业设计之jsp智慧社区管理系统 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,智慧社区管理系统利用计算机网络实现信息化管理,使整个智慧社区的发展和服务水平有显著提升。本文拟采用Eclipse开发工具&… 2026/7/5 11:48:18
如何去除 AI 输出文本中带 *、# 的小技巧,选用 AI 导出鸭优化文档导出,结合行业数据根除多余格式符号困扰 摘要 AI生成内容时常附带星号、井号等markdown标记符号,手动清理耗费大量办公时间。本文围绕去除特殊符号的实用技巧展开,结合市面五种主流文档导出方案横向测评,引用行业白皮书实测数据与业内专家观点,搭配用户实测反馈与问答科普… 2026/7/5 15:16:31
Web安全从入门到实战:一份430页的系统学习路线与CTF渗透指南 1. 项目概述:一份430页的Web安全学习路线图最近在整理自己的学习资料库,翻到了去年年底花了大半年时间整理汇总的一份Web安全学习笔记,足足有430多页。当时做这个的初衷很简单,就是觉得市面上很多资料要么太散,要么太旧… 2026/7/5 15:10:29
浏览器用户画像大屏搭建:从静态布局到交互联动(附完整代码) 本文为 Uniplore 「浏览器用户画像分析」实验系列全流程指南,覆盖静态布局制作、数据接入、交互联动三大核心模块,包含可直接复用的 SQL、蓝图节点代码与避坑技巧,新手也能零代码复刻企业级数据大屏。一、实验背景与目标本系列实验基于user_p… 2026/7/5 15:08:29
解放双手:用Python为Windows微信注入自动化能力 解放双手:用Python为Windows微信注入自动化能力 【免费下载链接】wxauto Windows版本微信客户端(非网页版)自动化,可实现简单的发送、接收微信消息,简单微信机器人 项目地址: https://gitcode.com/gh_mirrors/wx/wxa… 2026/7/5 15:08:29
新e选烤火罩pH值[主里料](C类)GB/T 7573—2009 判定符合 检测标准与测试条件标准安全区间:4.0-9.0(纺织品C类国标);0.1mol/L KCI溶液萃取测试。实测结果里料实测pH值7.1,同样落在温和中性安全区间。家用实用优势取暖时腿部会直接贴合烤火罩内里衬布,若里料酸碱值超… 2026/7/5 15:08:29
电脑省电技巧:从日常设置到硬件优化的实战指南 很多笔记本用户都有过这样的尴尬时刻:明明出门前电量是满的,结果在高铁上刚打开文档没多久,系统就弹窗提示电量不足;或者在会议室演示 PPT 时,风扇突然狂转,不仅噪音扰人,电量也如流水般下降。这… 2026/7/5 15:06:29
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36