Android API Guides 阅读笔记(3)----Intent and Intent Filter
来源:互联网 发布:上饶师范学校教务网络 编辑:程序博客网 时间:2024/06/05 22:45
Intent 是一个可以从App组件(Activity,Service,ContentProvider,BroadcastReceiver)请求动作(action)的消息对象,实现从一个组件跳转到另一个组件的功能,通过阅读文档,可以了解到:
Intent的三种基本使用场景:
- 启动一个Activity
- 启动一个Service
- 发送一个Broadcast
Intent的种类:
显示Intent,启动指定名字(组件的class类名)的组件
隐式Intent,(设备上的任何App通过过滤匹配可以执行这个Action)没有指定名字,通过申明动作(action)执行,组件接收到这个动作便会执行相关代码,允许其他App中的组件处理这个action,隐式的Intent通过Intent Filter进行过滤
注意,如果设备上没有App可以处理你指定的Intent,调用时你的App将会崩溃,为了防止这种事发生,最好在startActivity()之前调用resolveActivity()检测设备上是否有能执行此Intent的App,返回结果不会空则说明有,否则没有能执行此Intent的App,这时你就需要考虑使用其他方式处理你的Intent了
通常启动Service的Intent为显示的,这样子才安全,因为从Android 5.0之后,通过隐式的Intent调用bindService(),系统将会抛出异常
发送一个Intent时的组成:
需要启动的组件名字(className,通过如下方法设置:setCompontent(),setClass(),setClassName(),或者在Intent的构造方法中定义)隐式的Intent不需要申明组件名
动作(Action,用于Intent Filter筛选的条件)通常系统有一些特定的Action可供调用,如ACTION_VIEW(启动一个查看内容的App),ACTION_SEND(启动一个可以发送数据App),创建自定义Action时,一定要记得加上包名,如:static final String ACTION_EXAMPLE=”com.example.action.EXAMPLE”
数据和类型(data,type)Data是指定Action处理的对象,通常是以URi形式存在,Type用以指出Data的类型,例如一个Action为ACTION_EDIT,则它的Data应该是某个可编辑的文本的Uri,而它的Type应该指明这个文本的类型
分类(Category):包含了需要处理Intent的组件的分类信息,(即,区分哪种类型的组件可以处理这个Intent) 在一个测试隐式Intent的例子中,因为接收端App的Activity中Intent Filter没有设置这个属性,导致始终不能跳转到接收端App中的Activity。 下面将会给出原因
附件(Extras):用于传递键值对数据
标志位(Flags):用来通知Android System如何运行一个activity和运行以后如何处理
接收一个Intent时的组成:(通过定义Intent Filter过滤得到想要的Intent,通常在清单文件(AndroidManifest.xml)中使用< intent-filter >标签来过滤。)
< action >:申明可接受的动作名,用于匹配筛选出相同名的动作,其值必须为字符串而不能是常量类型,一个组件可以过滤多个Action
< data >:申明可以接收的数据类型,可以使用多组属性值进行多种数据类型匹配筛选
< category >:申明可以接收的Intent类型(注意,为了能接收到隐式的Intent,必须在Intent Filter中添加默认类型,否则系统检测不到Intent匹配的Activity
< category android:name="android.intent.category.DEFAULT"/>
)
以上,一条基本的过滤器就申明完成
Intent Filter的过滤原则:(通常,在< intent-filter >节点下可以有多个< action >, < category >或 < data >节点用来对Intent进行匹配过滤筛选,其过滤筛选原则如下)
< action >:过滤器中可以列出多个动作,匹配时Intent中的action值只要有一个配对了,则通过
< category >:过滤器中可以列出多个分类,匹配时Intent中的category必须每一个都对应才能通过,通过startActivity()启动的隐式Intent会有个默认的category:CATEGORY_DEFAULT常量,所以在< category >标签中必须要有个默认的值才能匹配到隐式Intent,这也就解释了上文中的那个测试。
通过设置该< intent-filter>对应的组件中的 exported属性为false,可以让你的组件只接受当前App内的Intent调用,也就是其他App通过隐式Intent不能调用你的组件
待召意图(PendingIntent)意为即将发生的意图,是Intent的一种包装,首要目的是授予另一个程序权限,任由它像你的程序一样来执行相应的操作,其主要使用场景为:
申明一个将要执行的Intent,当用户点击通知时执行(因为不知道什么时候会有通知来)
申明一个将要执行的Intent,当用户点击桌面小插件的时候执行
- 申明一个将要执行的Intent,在指定的一个将来时间执行(也就是定时执行)
Intent和PendingIntent的主要区别,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent,因此具有很大的灵活性
Common Intent
之前说过,Intent既可以启动当前应用程序中的Activity,也可以启动设备上任意符合过滤条件的Activity,后者称为隐式Intent(implicit Intent),通常,使用隐式Intent是为了启动一个公用的Activity来完成当前应用程序不具备的功能,比如拍照,打开相册,播放音乐或视频,设备上已经有了具备这些功能的应用,通过隐式Intent就可以直接使用,并将结果返回给当前应用程序,因此,可以称这类Intent为Common Intent(公共Intent),通过阅读这节内容将会了解到如何调用一些系统应用程序,具体使用与参数配置,可以参考官方文档:Common Intents
注意!在调用系统应用时,首先要确保申请了必须的权限
- Android API Guides 阅读笔记(3)----Intent and Intent Filter
- Android API Guides---Intents and Intent Filter
- Android Intent and Intent Filter
- Android Intent and Intent Filter
- Android Intent and Intent Filter
- Android Intent and Intent Filter
- Android Intent and Intent Filter
- Android Intent and Intent Filter
- Android API Guides 之 App Components(1) - Intents and Intent Filters
- Android API Guides 之 App Components(2) - Intents and Intent Filters - Common Intents
- intent and intent-filter
- Android API Guides---App Manifest <grant-uri-permission> <instrumentation> <intent-filter>
- android学习笔记之Intent&Intent filter
- android学习笔记:Intent,Intent Filter
- Android intent intent-filter
- Android intent intent-filter
- Android intent intent-filter
- Android API Guides学习1——Intents and Intent Filters
- dp-Supporting Different Screens
- 快速排序模版
- makefile详解
- dxp中的一批元件的锁定与解除
- iOS 多线程NSThread 三
- Android API Guides 阅读笔记(3)----Intent and Intent Filter
- 在java项目开发中要加入的spring的jar包(以spring 3.1版本为例)
- centos最小化安装后再安装图形界面
- 杭电1018 Big Number
- java IO图
- Nodejs进程管理模块forever详解
- zoj2417 Lowest Bit
- asp.net重写服务器控件
- 编译hadoop-2.5.2的源码过程