Android 中Intent 相关问题

打印 上一主题 下一主题

主题 1861|帖子 1861|积分 5587

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在答复 Intent 问题时,清楚区分其 定义类型 和 应用场景。以下是的答复策略:

一、Intent 的核心定义

Intent 是 Android 系统中的 消息传递对象,主要用于三大场景:

2. 隐式 Intent(Implicit Intent)




三、Intent 的关键组成要素

属性作用示例值Component显式指定目的组件ComponentName(pkg, cls)Action形貌操作类型(常量)Intent.ACTION_VIEWCategory增补Action的上下文信息Intent.CATEGORY_BROWSABLEDataURI格式的数据(通常与Type配合)Uri.parse("http://example.com")TypeMIME类型"image/png"Extras附加数据的BundleputExtra("id", 123)Flags控制启动模式FLAG_ACTIVITY_CLEAR_TOP
四、高级利用场景

1. PendingIntent



2. 深度链接(Deep Link)



3. Intent 过滤器辩论解决

当多个 Activity 声明相同 <intent-filter> 时:



五、口试高频问





  • 组件间通信:启动 Activity/Service,发送广播
  • 数据传递:携带附加数据(Bundle)
  • 隐式调用:声明式匹配系统或第三方组件
    二、Intent 的两种核心类型
  • 1. 显式 Intent(Explicit Intent)
  • 特点:明确指定目的组件(类名)
  • 利用场景:应用内部组件跳转
  • 上风:高效直接,无需系统解析
  • 示例
    kotlin
    复制
    1. // 启动Service
    2. Intent(this, MyService::class.java).also {
    3.     startService(it)
    4. }
    复制代码
  • 特点:通过 Action、Category、Data 等属性匹配组件
  • 利用场景:跨应用调用(如分享、打开链接)
  • 匹配规则
    xml
    复制
    1. <!-- AndroidManifest.xml 声明 -->
    2. <activity android:name=".ShareActivity">
    3.     <intent-filter>
    4.         <action android:name="android.intent.action.SEND" />
    5.         <category android:name="android.intent.category.DEFAULT" />
    6.         <data android:mimeType="text/plain" />
    7.     </intent-filter>
    8. </activity>
    复制代码
    运行 HTML
  • 示例
    kotlin
    复制
    1. // 调用系统分享
    2. Intent(Intent.ACTION_SEND).apply {
    3.     type = "text/plain"
    4.     putExtra(Intent.EXTRA_TEXT, "分享内容")
    5.     startActivity(Intent.createChooser(this, "选择分享应用"))
    6. }
    复制代码
  • 特点:答应外部应用以当前应用身份执行 Intent
  • 应用场景:通知栏点击、AlarmManager
  • 配置
    xml
    复制
    1. <intent-filter>
    2.     <data android:scheme="https"
    3.           android:host="example.com"
    4.           android:pathPrefix="/detail"/>
    5.     <!-- 必须添加 -->
    6.     <category android:name="android.intent.category.BROWSABLE"/>
    7.     <category android:name="android.intent.category.DEFAULT"/>
    8. </intent-filter>
    复制代码
    运行 HTML
  • 验证
    bash
    复制
    1. adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/detail?id=123"
    复制代码
  • 系统弹出选择器(ResolverActivity)
  • 可通过 PackageManager.queryIntentActivities() 获取匹配列表
  • 优先选择优先级高的组件(<intent-filter android:priority="100">)
  • 示例
    kotlin
    复制
    1. val pendingIntent = PendingIntent.getActivity(
    2.     this, 0, intent,
    3.     PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
    4. )
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表