Coin163

首页 > 《Android 开发艺术探索》读书笔记三 Intent和IntentFilter详解

《Android 开发艺术探索》读书笔记三 Intent和IntentFilter详解

相关标签: data android flags action intent

2020腾讯云双十一活动,全年最低!!!(领取3500元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1073

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
入口地址https://www.aliyun.com/minisite/goods

相关推荐:《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析

本节和《Android群英传》中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 http://blog.csdn.net/lijinhua7602/article/details/41972303 7.1 View动画   (1)android动画分为view动画、帧动画和属性动画,属性动

一、Intent详解 Intent封装了程序想要启动程序的意图,Android三大组件Activity,Service, 以及BroadcastReceiver都是依靠Intent来进行启动的。 1、Intent的Component属性 Intent对象的setComponent(ComponentNamecomp)方法用于设置Intent的Component属性。ComponentName包含如下几个构造器: ComponentName(Stringpkg, String cls)ComponentName(Contextpkg, String cls)ComponentName(Contextpkg, Class<?> cls) 由以上的构造器可知, 创建一个ComponentName对象需要指定包名和类名–这就可以唯一确定一个组件类, 这样应用程序即可根据给定的组件类去启动特定的组件。例如: ComponentName comp =new ComponentName(FirstActivity.this,SecondActivity.class);Intent intent = new Intent();intent.setComponent(comp); 以上三句代码创建了一个intent对象, 并为其指定了Component属性, 完全等价于下面的代码: Intent intent = new Intent(FirstActivity.this,SecondActivity.class); 除了使用setComponent()之外, 还可以使用setClass(),setClassName()来显式指定目标组件, 还可以调用getComponent()方法获得Intent中封装的ComponentName对象。 当程序采用这种形式启动组件时, 在Intent中明确的指定了待启动的组件类, 此时的Intent属于显式intent, 显式Intent应用场合比较狭窄, 多用于启动本应用中的component,因为这种方式需要提前获知目标组件类的全限定名。 而隐式Intent则通过Intent中的action,category, data属性指定目标组件需要满足的若干条件, 系统筛选出满足所有条件的component,从中选择最合适的component或者由用户选择一个component作为目标组件启动。 如果Intent中指定了ComponentName属性, 则Intent的其他属性将被忽略。 2、Intent的Action属性 action属性是一个字符串, 代表某一种特定的动作。 Intent类预定义了一些action常量, 开发者也可以自定义action。一般来说, 自定义的action应该以application的包名作为前缀, 然后附加特定的大写字符串, Intent类的setAction()方法用于设定action,getAction()方法可以获取Intent中封装的action。 以下是Intent类中预定义的部分action: (1)ACTION_CALL–目标组件为activity,代表拨号动作; (2)ACTION_EDIT–目标组件为activity,代表向用户显示数据以供其编辑的动作; (3)ACTION_MAIN–目标组件为activity,表示作为task中的初始activity启动; (4)ACTION_BATTERY_LOW–目标组件为broadcastReceiver,提醒手机电量过低; (5)ACTION_SCREEN_ON–目标组件为broadcast,表示开启屏幕。 3、Intent的Category属性 category属性也是一个字符串, 用于指定一些目标组件需要满足的额外条件。 Intent对象中可以包含任意多个category属性。 Intent类也预定义了一些category常量, 开发者也可以自定义category属性。 Intent类的addCategory()方法为Intent添加Category属性,getCategories()方法用于获取Intent中封装的所有category。 以下是Intent类中预定义的部分category: (1)CATEGORY_HOME–表示目标activity必须是一个显示homescreen的activity; (2)CATEGOR

相关推荐:《Android 开发艺术探索》读书笔记六 IPC机制之Binder

一、Binder简介 Binder是Android中的一个类,它实现于IBinder接口: (1)从IPC角度来说,Binder是一种跨进程通信的方式; (2)从Android Framework角度来讲,Binder是ServiceManager连接各种Manager(ActicityManager、WindowManager等等)和相应ManagerSer

Y_LAUNCHER–表示目标activity可以作为task栈中的初始activity,常与ACTION_MAIN配合使用; (3)CATEGORY_GADGET–表示目标activity可以被作为另一个activity的一部分嵌入。 4、Intent的Data属性 data属性指定所操作数据的URI,data经常与action配合使用: 如果action为ACTION_EDIT,data的值应该指明被编辑文档的URI; 如果action为ACTION_CALL,data的值应该是一个以”tel:”开头并在其后附加号码的URI; 如果action为ACTION_VIEW,data的值应该是一个以”http:”开头并在其后附加网址的URI。 Intent类的setData()方法用于设置data属性,setType()方法用于设置data的MIME类型,setDataAndType()方法可以同时设定两者。可以通过getData()方法获取data属性的值, 通过getType()方法获取data的MIME类型。 5、Intent的Extra属性 通过Intent启动一个component时, 经常需要携带一些额外的数据过去。携带数据需要调用Intent的putExtra()方法, 该方法存在多个重载方法, 可用于携带基本数据类型及其数组, String类型及其数组, Serializable类型及其数组,Parcelable类型及其数组, Bundle类型等。Serializable和Parcelable类型代表一个可序列化的对象, Bundle与Map类似,可用于存储键值对。 6、Intent的Flag属性 flag属性是一个int值, 用于通知android系统如何启动目标activity,或者启动目标activity之后应该采取怎样的后续操作。所有的flag都在Intent类中定义, 部分常用flag如下: (1)FLAG_ACTIVITY_NEW_TASK–通知系统将目标activity作为一个新task的初始activity; (2)FLAG_ACTIVITY_NO_HISTORY–通知系统不要将目标activity放入历史栈中; (3)FLAG_FROM_BACKGROUND–通知系统这个Intent来源于后台操作, 而非用户的直接选择。 二、IntentFilter详解 IntentFilter类表示Intent过滤器, 大部分情况下, 每一个component都会定义一个或多个IntentFilter,用于表明其可处理的Intent。 一般来说,component的IntentFilter应该在AndroidManifest。xml文件中定义。 定义的方法: 在,, 元素中增加一个或多个子元素。如: <!-- 声明作为程序入口的Activity--><activityandroid:name=".FirstActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>

</intent-filter></activity> IntentFilter与隐式Intent: android系统处理隐式Intent时, 会比较Intent和IntentFilter的action,data, category属性, 如果以上3个属性全都相符的话, 则IntentFilter所属的component就可以作为目标组件的候选(存在多个符合条件的component时)。 参考: http://blog.csdn.net/luohai859/article/details/7368745 http://blog.csdn.net/zhaofangyuan/article/details/7962429 http://blog.csdn.net/wuwenxiang91322/article/details/7671593

原文

一、Intent详解 Intent封装了程序想要启动程序的意图,Android三大组件Activity,Service, 以及BroadcastReceiver都是依靠Intent来进行启动的。 1、Intent的Component属性 Intent对象的setCompon

------分隔线----------------------------