尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Android Intent知识总结
Android Intent 知识总结整理日期2026-07-30覆盖显式/隐式 Intent、Intent Filter、PendingIntent、Flag、安全限制与现代 API官方Intents and Intent Filters目录1. 是什么2. 能启动什么3. 显式 vs 隐式4. Intent 核心字段5. Intent Filter 匹配规则6. 常用 Action / Category / Data7. 传递数据8. 启动与结果回调9. Intent Flag10. PendingIntent11. 广播中的 Intent12. 安全与高版本限制13. 常见坑14. 速查 Checklist15. 优缺点与选型16. 参考链接1. 是什么Intent是 Android 组件间通信的消息对象描述「要做什么」启动 Activity / Service发送广播携带 action、data、category、extras、component 等信息系统根据 Intent 找到目标组件解析匹配或显式指定。发送方 ── Intent ──→ 系统AMS──→ 目标组件注意Intent不是通用 RPC跨进程大数据、持续通信应使用 Binder / AIDL / ContentProvider 等。2. 能启动什么目标API说明ActivitystartActivity/startActivityForResult旧/ Activity Result API可带 Flag、结果回传ServicestartService/startForegroundService/bindService后台限制多优先评估 WorkManager / FGSBroadcastReceiversendBroadcast/sendOrderedBroadcast显式广播更安全其他 App隐式 Intent 或显式指定包名/组件受包可见性、exported 影响3. 显式 vs 隐式3.1 显式 IntentExplicit明确指定目标组件类名或ComponentName应用内首选。valintentIntent(this,DetailActivity::class.java).apply{putExtra(EXTRA_ID,id)}startActivity(intent)优点匹配确定、安全、不受 Filter 干扰缺点需知道目标类跨应用时耦合包名/组件名3.2 隐式 IntentImplicit不指定组件靠action category data与 Manifest 中intent-filter匹配。valintentIntent(Intent.ACTION_VIEW,Uri.parse(https://example.com))startActivity(intent)优点解耦、可调起系统/其他 App浏览器、分享、相机缺点可能匹配多个或零个安全与可见性限制多解析相关resolveActivity/queryIntentActivities是否有处理器多个匹配时系统弹出选择器可用Intent.createChooser强制选择器4. Intent 核心字段字段作用Component显式目标组件Action要执行的通用动作字符串DataUri如content://、https://、tel:TypeMIME如image/*、application/pdf可与 Data 联动Category额外类别如CATEGORY_DEFAULT、LAUNCHERExtrasBundle键值对载荷Flags影响任务栈、权限授予等行为Package限制只匹配某包名半显式关系示意Intent ├─ component? → 有则显式不再走 filter 匹配 ├─ action / category ├─ data (uri) type ├─ extras (Bundle) └─ flags设置 Data 与 Type 时注意setData会清 typesetType会清 data需同时设时用setDataAndType。5. Intent Filter 匹配规则目标组件在 Manifest 声明intent-filter后隐式 Intent 需同时满足5.1 ActionIntent 的 action 必须与 Filter 中某一个action 相同Filter 无 action 则匹配不带 action 的 Intent少见5.2 CategoryIntent 中的每个category 都必须在 Filter 中出现startActivity会自动加CATEGORY_DEFAULT故 Activity 的 filter几乎必须写categoryandroid:nameandroid.intent.category.DEFAULT/5.3 Data按 URI 的 scheme / host / port / path / pathPrefix / pathPattern 以及 mimeType 匹配。多个data会组合成可匹配集合具体以官方匹配算法为准。示例activityandroid:name.WebActivityandroid:exportedtrueintent-filteractionandroid:nameandroid.intent.action.VIEW/categoryandroid:nameandroid.intent.category.DEFAULT/categoryandroid:nameandroid.intent.category.BROWSABLE/dataandroid:schemehttpsandroid:hostwww.example.com//intent-filter/activityDeep Link / App LinksBROWSABLEhttps Digital Asset Links 验证。6. 常用 Action / Category / Data6.1 常见 ActionAction用途ACTION_MAIN入口配合CATEGORY_LAUNCHERACTION_VIEW查看数据链接、地图、文件ACTION_SEND/ACTION_SEND_MULTIPLE分享ACTION_DIAL/ACTION_CALL拨号CALL 需权限ACTION_EDIT编辑ACTION_PICK/ACTION_GET_CONTENT/ACTION_OPEN_DOCUMENT选择内容推荐 SAFACTION_CREATE_DOCUMENT创建文档SAFACTION_WEB_SEARCH网页搜索ACTION_BATTERY_LOW等系统广播多已限制静态注册自定义 action 建议用包名反域com.example.app.ACTION_SYNC。6.2 常见 CategoryCategory用途CATEGORY_DEFAULTActivity 隐式启动必需CATEGORY_LAUNCHER桌面图标入口CATEGORY_BROWSABLE可被浏览器/链接唤起6.3 Data 示例Intent(Intent.ACTION_VIEW,Uri.parse(geo:0,0?qBeijing))Intent(Intent.ACTION_DIAL,Uri.parse(tel:10086))Intent(Intent.ACTION_SEND).apply{typetext/plainputExtra(Intent.EXTRA_TEXT,hello)}7. 传递数据7.1 Extrasintent.putExtra(key_string,value)intent.putExtra(key_int,1)intent.putExtra(key_parcelable,user)// Parcelable / 推荐 Parcelizevalbundleintent.extras注意说明体积Intent 载荷有 Binder 事务大小限制常见约 1MB 量级宜远小于此大图/大列表用Uri、磁盘缓存、ViewModel、单例仓库勿塞巨型 Bitmap类型安全可用类型安全封装或 Navigation Safe Args7.2 ClipData / URI 权限分享文件时valintentIntent(Intent.ACTION_SEND).apply{typeapplication/pdfputExtra(Intent.EXTRA_STREAM,contentUri)addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)clipDataClipData.newUri(contentResolver,pdf,contentUri)}使用FileProvider提供content://Uri避免file://与FileUriExposedException。8. 启动与结果回调8.1 只启动startActivity(intent)// 跨任务栈常见// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)8.2 需要返回结果现代写法vallauncherregisterForActivityResult(ActivityResultContracts.StartActivityForResult()){result-if(result.resultCodeRESULT_OK){valdataresult.data}}launcher.launch(Intent(this,EditActivity::class.java))常用 ContractTakePicture、GetContent、OpenDocument、RequestPermission等。目标页返回setResult(RESULT_OK,Intent().putExtra(result,value))finish()旧 APIstartActivityForResult/onActivityResult已不推荐。9. Intent Flag9.1 任务栈相关ActivityFlag作用FLAG_ACTIVITY_NEW_TASK在新任务中启动非 Activity Context 常必需FLAG_ACTIVITY_CLEAR_TOP若栈中已有目标清除其上 Activity 并复用/重建FLAG_ACTIVITY_SINGLE_TOP栈顶已是目标则不新建走onNewIntentFLAG_ACTIVITY_CLEAR_TASK常与 NEW_TASK 联用清空目标任务再启动FLAG_ACTIVITY_NO_HISTORY离开后不留在栈中FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS不进最近任务与launchModesingleTop/singleTask等共同决定实例复用需结合测试。9.2 URI 权限相关Flag作用FLAG_GRANT_READ_URI_PERMISSION授予接收方读 UriFLAG_GRANT_WRITE_URI_PERMISSION授予写FLAG_GRANT_PERSISTABLE_URI_PERMISSION可持久化需再 takePersistable9.3 其他Flag作用FLAG_ACTIVITY_NEW_DOCUMENT文档式多任务近年多窗场景Receiver 相关如FLAG_RECEIVER_FOREGROUND等按场景查阅10. PendingIntentPendingIntent交给其他应用/系统通知、闹钟、桌面小部件的「延迟触发 Intent 令牌」由系统持有发送身份按创建时的权限与身份。valintentIntent(context,TargetActivity::class.java)valpendingPendingIntent.getActivity(context,requestCode,intent,PendingIntent.FLAG_UPDATE_CURRENTorPendingIntent.FLAG_IMMUTABLE)工厂方法用途getActivity拉起 ActivitygetBroadcast发广播getService/getForegroundService启服务可变性Android 12 强制必须指定其一FLAG_IMMUTABLE不可被填充修改默认推荐FLAG_MUTABLE允许后续修改如内联回复、需填充 Extra 的场景常与FLAG_UPDATE_CURRENT/FLAG_CANCEL_CURRENT/FLAG_ONE_SHOT组合。优点系统组件可代为拉起 App权限模型清晰缺点Flag 用错易安全漏洞或无法更新后台启动 Activity 仍受限11. 广播中的 Intent// 发送sendBroadcast(Intent(ACTION_CUSTOM).setPackage(packageName))// 显式包名更安全// 动态注册API 34 必须指定导出标志ContextCompat.registerReceiver(context,receiver,IntentFilter(ACTION_CUSTOM),ContextCompat.RECEIVER_NOT_EXPORTED)点说明显式广播指定组件或 package避免被第三方窃听隐式 静态注册Android 8 大量禁止有序广播sendOrderedBroadcast可中止传播LocalBroadcastManager已废弃改用应用内事件Flow 等12. 安全与高版本限制版本/主题影响Android 11 包可见性查询/调起其他 App 需queries或可见性例外Android 12 exported含 intent-filter 的组件必须声明android:exportedAndroid 12 PendingIntent必须 IMMUTABLE 或 MUTABLEAndroid 12 隐式 Intent向非导出组件发送隐式 Intent 受限匹配规则更严Android 10 BAL后台启动 Activity 严格限制通知 PendingIntent 等有例外路径Android 14动态广播必须指定 exportedIntentSender/BAL 继续收紧File Uri禁止暴露file://给其他 App用 FileProvider原则应用内通信 →显式 Intent对外能力 → 最小化exportedtrue 权限分享文件 →content:// Grant Uri Permission调外部 App → 先resolveActivity并声明queriesqueriesintentactionandroid:nameandroid.intent.action.VIEW/dataandroid:schemehttps//intentpackageandroid:namecom.other.app//queries13. 常见坑现象原因处理ActivityNotFoundException无匹配或包不可见resolveActivity补queries隐式启不起来缺CATEGORY_DEFAULTFilter 加上 DEFAULTsetType后 data 丢了API 互斥用setDataAndTypeTransactionTooLargeExtras 过大改传 Uri/ID通知点了没反应PendingIntent Flag/后台限制IMMUTABLE/UPDATE符合 BAL 例外分享图片对方打不开未授权 Uri / 未设 ClipDataFLAG_GRANT_READ ClipData非 Activity Context 崩溃缺NEW_TASK加FLAG_ACTIVITY_NEW_TASKonNewIntent没走未 singleTop/Flag检查 launchMode 与 Flag14. 速查 Checklist应用内跳转是否全部显式Activity 隐式 filter 是否含DEFAULT及需要的BROWSABLE含 filter 的组件是否声明exported对外调起是否声明queriesExtras 是否够小大对象是否改 Uri文件分享是否 FileProvider Grant 权限PendingIntent 是否含IMMUTABLE/MUTABLE结果回调是否已迁 Activity Result APIService/广播是否符合后台与导出新规15. 优缺点与选型Intent 机制整体优点系统级解耦易调起系统能力组件模型统一缺点隐式匹配与安全策略复杂载荷大小受限后台行为年年收紧怎么选场景建议同 App 页面跳转显式 Intent / Navigation 组件要返回结果Activity Result API打开链接/分享/选文件隐式 Intent 系统 Contract通知/小组件/闹钟PendingIntentIMMUTABLE 优先应用内事件总线不要用隐式广播用 Flow / 共享 ViewModel跨 App 结构化数据ContentProvider而非塞巨型 Extra16. 参考链接Intents and Intent FiltersCommon IntentsPendingIntentActivity Result APIPackage visibilityShare files with FileProvider一句话Intent 描述「要做什么」应用内用显式跨应用用隐式 Filter数据走 Extras/Uri系统代发用 PendingIntent始终处理exported、包可见性、Uri 权限与后台启动限制。
RELATED

相关推荐

求助!!请大家帮忙看看我的嵌入式规划

求助!!请大家帮忙看看我的嵌入式规划

本人某末2的电子专业,开学大二,下个暑假想去找实习,请大家看看我这样规划能不能行

📅 2026/9/12 1:47:26
数据资产目录:从元数据管理到数据治理的实践指南

数据资产目录:从元数据管理到数据治理的实践指南

1. 从“数据沼泽”到“数据绿洲”:为什么你的团队需要一个资产目录如果你在数据团队待过一段时间,大概率听过这样的对话:“我们去年不是做过一个用户画像项目吗?那个模型文件放哪了?”“财务部要的那个季度销售报表&am…

📅 2026/9/8 11:22:33
Windows安卓应用安装终极指南:3分钟快速掌握APK Installer完整使用

Windows安卓应用安装终极指南:3分钟快速掌握APK Installer完整使用

Windows安卓应用安装终极指南:3分钟快速掌握APK Installer完整使用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer是一款专为Windows平台设计…

📅 2026/9/8 21:46:30
MORE NEWS

更多资讯

📰

Python Flask/Django开发高校选课成绩管理系统实战

1. 项目概述:基于Python的在线选课与成绩管理系统高校教务管理一直是教育信息化建设的核心环节。传统的手工登记选课和纸质成绩单管理方式效率低下且容易出错,而市面上的商业系统往往价格昂贵且定制化程度低。这个基于Python Flask/Django框架开发的网络…

📰

基于STM32的无线病床呼叫系统:从硬件连接到语音播报实现

简介:基于STM32的无线病床智能语音提示呼叫系统,是一份面向嵌入式毕业设计、课程实训及无线传感网相关课题的完整设计方案,主要解决病房中病床呼叫信息无法远程实时传递的问题。系统分为病床端和护士端:病床端以STM32核心板为主控…

📰

NC65开发Restful接口全流程:从注册到调试避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PY32F002B:SOP8封装ARM MCU的成本重构实践

1. PY32F002B不是“又一款国产MCU”,而是成本结构重构的临界点PY32F002B这个型号,最近在嵌入式工程师的微信群、BOM比价表和产线试产单里出现频率陡增。它不是那种“参数表看起来很美,但一上板就掉坑”的新品,而是一个明确指向量产…

📰

STM32软件SPI驱动TFT-LCD实战:从点亮到稳定显示

1. 项目概述:为什么在2024年还要认真搞软件SPI驱动TFT-LCD?STM32驱动1.8寸TFT‑LCD(软件SPI)完整讲解——这个标题里藏着三个关键信号:资源受限、调试可控、教学友好。我带过十几届嵌入式实训班,也给二十多…

📰

STM32燃气安防系统工程级设计与抗干扰实践

1. 这不是“又一个STM32项目”,而是一套可直接上电验证的安防工程原型你搜“STM32 智能安防”出来的结果,十有八九是带LED闪烁、蜂鸣器响两声、串口打印“Gas detected!”的Demo——它连传感器都没接稳,更别说在真实环境里扛住电磁干扰、电源…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬