您的位置:首页 > 移动开发 > Android开发

Android菜鸟认知——Intent和Intent filter初印象

2016-03-06 17:09 405 查看
涉及到的一些名词的解释: Uri

intent是啥子,intent的干嘛用的,intent经常使用方式是什么,intent的使用有什么需要注意的,intent是如何匹配相应的组件去实现的。

intent如何启动一个东西的例子实在是太多了,这里不对intent的具体应用做列举。只是和基础不是很好的朋友一起认识一下 intent和 intent filter

Intent 是 组件之间传递信息的纽带,它使用的范围就是启动3大组件,activity,Service,broadcast。

intent启动方式为两种:显示,隐式。显示启动,你知道你想启动的是啥,让他直接去接管你想要做的事。隐式,你表达了一个行为的意图,然后让能做的去做。

简单的介绍一下显示启动,下面会详细介绍隐式启动,因为隐式启动涉及到 关于intent匹配的问题。

显示启动,简单粗暴的告诉系统我要启动的组件,通过的方式是:设置CompinentName 这是个什么鬼东西:它有两个字段,一个是packagename ,一个是class

也就是说 可以指定 哪个应用包的哪个组件启动。我们可以通过这个方法启动别的app的组件。setClassName setClass  还有一些方式都是大家常用的就不多列举了。

Intent过滤器

说到隐式启动必然先要知道 intent的过滤器。在Manifest文件中进行定义,作用就是筛选intent,也就是说他告诉系统,这个组件只接收满足我这些条件的intent。这里有三个参数作为 筛选的参考: <action> <data> <category> 分别是 (我能干啥),(我需要使用的家伙事是啥,是啥类型的),(我能接收人是啥样的)。

来个例子

  	<action android:name="android.intent.action.SEND"/>(我能发)
        <category android:name="android.intent.category.DEFAULT"/>(我啥样的人都接收(默认的))
        <data android:mimeType="text/plain"/>(我用的家伙事是文字)


<action android:name="android.intent.action.SEND"/>(我能发)
        <action android:name="android.intent.action.SEND_MULTIPLE"/>(我能群发)
        <category android:name="android.intent.category.DEFAULT"/>(谁让我干 我都干)
        <data android:mimeType="application/vnd.google.panorama360+jpg"/>(我要的家伙事是 图片类型的,音频类型的)
        <data android:mimeType="image/*"/>
        <data android:mimeType="video/*"/>


<action android:name="android.intent.action.MAIN" />(我是关键)
        <category android:name="android.intent.category.LAUNCHER" />(我只接收能让我启动的人)


这里详细介绍一下 <data>  它由两部分组成 一个是uri  一个是MIME  

若要同时设置 URI 和 MIME 类型,请勿调用 
setData()
 和 
setType()
,因为它们会互相抵消彼此的值。请始终使用 
setDataAndType()
 同时设置
URI 和 MIME 类型。

声明这些之后就可以接收隐式Intent了

构建Intent

我们仔细研究一下 一个Intent 对象由哪些成分组成 :ComponentName action data extra category flags(这个意图的运行模式 例如activity的
singletop)

Comontent : 目的组件, 显示启动的象征,直接决定了要启动的组件

action :行为意图 ,和过滤器中的 <action>进行匹配,用户可以自己在Manifest自定义action

data : uri 我们可以理解为数据的地址

category : 动作的类型,默认是default 配合action 帮助系统选定适合的组件。自定义类别:用户可以在Manifest文件中自定义category

MIME : 数据的mime类型,也可以理解为文件格式

extras: 额外信息,不是用于匹配Intent过滤器的,只是负载了一些额外的信息。

Flags : 例如希望 activity的运行模式是 singletop

隐式启动当中我们需要注意的是 我们要先去了解系统中是否有满足我们Intent的 过滤器

这里需要执行这样的判断

if (sendIntent.resolveActivity(getPackageManager()) != null) {
    		startActivity(chooser);
}


待定Intent

这个是干嘛用的? 常用于三种情况: 使用桌面小工具时需要执行的Intent, 希望在未来的某个时间执行Intent 。

PindingIntent 的创建方法  getActivity getService getBroadcast 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 基础 filter