android intent相关
intent 在android中就像activity之间包括不同class中的activity交互的胶水,把他们联系起来。
intent主要有以下几个重要组成部件
action ACTION_VIEW, ACTION_DIAL等 标准的ACTION_VIEW 被“android.intent.action.VIEW”调用
data 可以通过Uri
加上一些主要属性
category 是定义要执行的activity的附加属性,例如,CATEGORY_LAUNCHERactivity将在启动时作为最高级显示
type 指定intent数据的明确类型
component 指定一个明确的class组件去用这个intent
extras 这是Bundle的额外信息,bundle可以提供扩展的信息给组件
intent主要通过两种方式去使用
显示intent 通过指定一个特定的class组件(通过setComponent(ComponentName) 或setClass(Context, Class))
一般这种intent不包含其他信息,简单通过这种方式去启动这个class组件中内部包含的不同组件
隐示intent 没有直接指定一个组件,而是通过提供足够的信息给系统去决定哪个组件最符合要求然后去启动它。
通过隐示intent 可以用一个intent 映射一个 activity,BroadcastReceive或service(甚至多个)可以捕获它。
intent决策机制主要通过匹配<intent-filter>中的信息(在broadcast中, 任何的BroadcastReceiver
对象要通过registerReceiver(BroadcastReceiver, IntentFilter)准确的注册)
action, type和category这三方面intent的信息决定intent的使用。
通过这些信息packageManager将会决定查询哪个组件能捕获这个intent
这个合适的组件主要通过AndroidManifest提供的intent信息决定的
1.action 如果给定了,必须作为组件可以处理的列出来
2.type(mimetype) 从intent的data接收。如果在intent的data中没有提供,像action必须包含在intent中
必须作为组件可以处理的列出来
3.categories如果给定了,必须作为组件可以处理的列出来
也就是,如果你包含CATEGORY_LAUNCHER和CATEGORY_ALTERNATIVE,你将只能处理的组件
通过intent包含这两种categories,activity经常需要支持CATEGORY_DEFAULT以致我们这些intent能被
Context.startActivity()发现。
在AndroidManifest.xml每一个<activity>包含的每一个<intent-filter>表明这个activity可以接收的intent信息(模板)
startActivity(Intent)用于启动一个新的activity, 新的activity位于activity栈的顶端
startActivityForResult(Intent, int)当你想在一个自己启动的activity结束时得到消息结果时,
第二个参数(大于0)定义了启动的新的activity代号。
并且新的activity结束时将会返回结果,通过onActivityResult(int requestCode, int resultCode, Intent Data)
其中requestCode就是父activity指定新activity的代号
子activity可以通过setResult(int)(标准结果为RESULT_CANCELED(子activity失败时), RESULT_OK,或者任意自己定义的值 返回到父activity里
onActivityResult 的 resultCode)
更多相关文章
- Android(安卓)平板开发关闭一个Fragment的方法
- 天气预报(三)
- android六大布局和UI组件
- 如何创建一个android的react-native组件(一)
- Android实现获取SERIAL信息的方法
- Android程序中多个 Launcher Activity
- android基础知识06:intent和intentfilter
- android中scrollview与webview冲突事件
- ANR(1)---理解Android(安卓)ANR的信息收集过程