




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
了解Intent的功能及作用掌握Intent常用的属性及方法熟悉Activity之间的消息传递机制了解广播接收Intent了解Intent的实现策略许可本章目标-1-组成属性设置属性方法获取属性方法动作ActionsetAction()getAction()数据DatasetData()getData()分类CategoryaddCategory()getCategories()类型TypesetType()getType()组件ComponentsetComponent()setClass()setClassName()getComponent()扩展信息ExtraputExtra()getXXXExtra()获取不同数据类型的数据,如int类型则使用getIntExtra(),字符串则使用getStringExtra()getExtras()获取Bundle包Intent概述Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。Intent由动作、数据、分类、类型、组件和扩展信息等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法。-2-Action属性Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动作,如ACTION_CALL(打电话)、ACTION_EDIT(编辑)等。Action属性常量Action常量行为描述使用组件(分类)ACTION_CALL打电话,即直接呼叫Data中所带电话号码ActivityACTION_ANSWER接听来电ACTION_SEND由用户指定发送方式进行数据发送操作ACTION_SENDTO根据不同的Data类型,通过对应的软件发送数据ACTION_VIEW根据不同的Data类型,通过对应的软件显示数据ACTION_EDIT显示可编辑的数据ACTION_MAIN应用程序的入口ACTION_SYNC同步服务器与移动设备之间的数据ACTION_BATTERY_LOW警告设备电量低BroadcastACTION_HEADSET_PLUG插入或者拔出耳机ACTION_SCREEN_ON打开移动设备屏幕ACTION_TIMEZONE_CHANGED移动设备时区发生变化-3-Data属性Intent的Data属性是执行动作的URI和MIME类型Data属性常量Action和Data一般匹配使用,不同的Action由不同的Data数据指定Data属性说明示例tel://号码数据格式,后跟电话号码tel://123mailto://邮件数据格式,后跟邮件收件人地址mailto://dh@163.comsmsto://短息数据格式,后跟短信接收号码smsto://123content://内容数据格式,后跟需要读取的内容content://contacts/people/1file://文件数据格式,后跟文件路径file://sdcard/mymusic.mp3geo://latitude,longitude经纬数据格式,在地图上显示经纬度所指定的位置geo://180,65Action属性Data属性描述ACTION_VIEWcontent://contacts/people/1显示_id为1的联系人信息ACTION_EDITcontent://contacts/people/1编辑_id为1的联系人信息ACTION_VIEWtel:123显示电话为123的联系人信息ACTION_VIEW在浏览器中浏览该网页ACTION_VIEWfile:///sdcard/mymusic.mp3播放MP3-4-Category属性Category属性指明一个执行Action的分类Intent中定义了一系列Category属性常量Category属性说明CATEGORY_DEFAULT默认的执行方式,按照普通Activity的执行方式执行CATEGORY_HOME该组件为HomeActivityCATEGORY_LAUNCHER优先级最高的Activity,通常为入口ACTION_MAIN配合使用CATEGORY_BROWSABLE可以使用浏览器启动CATEGORY_GADGET可以内嵌到另外的Activity中-5-Component属性Component属性用于指明Intent的目标组件的类名称。通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后,Intent的其他属性都是可选的。根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:显式Intent,这种方式通过直接指定组件名称Component来实现;隐式Intent,这种方式通过IntentFilter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。显式Intent通过setComponent()、setClassName()或setClass()设置组件名://创建一个Intent对象Intentintent=newIntent();//指定Intent对象的目标组件是Activity2intent.setClass(Activity1.this,Activity2.class);当前环境目标组件-6-Extra属性Extra属性用于添加一些附加信息,例如发送一个邮件,就可以通过Extra属性来添加主题(subject)和内容(body)。通过使用Intent对象的putExtra()方法来添加附加信息将一个人的姓名附加到Intent对象中,代码如下所示Intentintent=newIntent();intent.putExtra("name","zhangsan");通过使用Intent对象的getXXXExtra()方法可以获取附加信息。例如,将上面代码存入Intent对象中的人名获取出来,因存入的是字符串,所以可以使用getStringExtra()方法获取数据Stringname=intent.getStringExtra("name");-7-Intent启动Intent启动不同组件的方法:核心组件调用方法作用ActivityContext.startActivity()Activity.startActivityForRestult()启动一个Activity或使一个已存在的Activity去做新的工作ServicesContext.startService()初始化一个Service或传递一个新的操作给当前正在运行的ServiceContext.bindService()绑定一个已存在的ServiceBroadcastReceiverContext.sendBroadcast()Context.sendOrderedBroadcast()Context.sendStickyBroadcast()对所有想接受消息的BroadcastReceiver传递消息-8-Intent消息传递Intent的Extra属性用于添加一些附加信息,利用该属性可以进行消息的传递。将传递的信息存放到Extra属性中有如下两种方式:一种是直接调用putExtra()方法将信息添加到Extra属性中,然后通过调用getXXXExtra()方法进行获取即可。这种方式比较简单、直接,主要用于数据量比较少的情况下。另一种是先将数据封装到Bundle包中,Bundle可以被看成一个“键/值”映射的哈希表,当数据量比较多时,可以使用Bundle存放数据;然后通过putExtras()方法将Bundle对象添加到Extra属性中,再通过使用getExtras()方法获取存放的Bundle对象;最后读取Bundle包中的数据。这种方式是间接通过Bundle包对数据先进行封装,再进行传递,实现起来比较繁琐,因此主要用于数据量较多的情况。-9-Intent消息传递-Bundle类方法功能描述Objectget(Stringkey)获取关键字key对应的数据booleangetBoolean(Stringkey)获取关键字key对应的布尔值,若找不到关键字的记录,则返回falsebooleangetBoolean(Stringkey,booleandefaultValue)获取关键字key对应的布尔值,若找不到关键字的记录,则返回defaultValueBundlegetBundle(Stringkey)获取关键字key对应的Bundle对象,若找不到关键字的记录,则返回nullchargetChar(Stringkey)获取关键字key对应的char值,若找不到关键字的记录,则返回0chargetChar(Stringkey,chardefaultValue)获取关键字key对应的char值,若找不到关键字的记录,则返回defaultValuebooleanhasFileDescriptors()Bundle对象是否包含文件描述符,返回true则Bundle对象包含文件描述符,否则不包含voidputAll(Bundlemap)插入map到该Bundle对象中voidputBoolean(Stringkey,booleanvalue)插入布尔值value到该Bundle对象中,若关键字key已存在,则原有值被value替代voidputBundle(Stringkey,Bundlevalue)插入Bundle对象value到该Bundle对象中voidputByte(Stringkey,bytevalue)插入字节值value到该Bundle对象中voidremove(Stringkey)移除关键字为key的记录intsize()获取Bundle对象的关键字个数-10-IntentFilterIntent可以通过显示方式或隐式方式找到目标组件,显示方式是直接通过设置组件名来实现,而隐式方式则是通过IntentFilter过滤实现。Android提供了两种生成IntentFilter方式:一种是通过IntentFilter类生成;另一种通过在配置文件AndroidManifest.xml中定义<intent-filter>元素生成。-11-<intent-filter>元素在AndroidManifest.xml配置文件中,IntentFilter以<intent-filter>元素来指定,一个组件中可以有多个<intent-filter>元素,每个<intent-filter>元素描述不同的能力。<intent-filter>元素中常用<action>、<data>和<category>这些子元素,分别对应Intent中的Action、Data和Category属性,用于对Intent进行匹配。<activityandroid:name="com.dh.Activity1" android:label="@string/app_name">
<intent-filter> <actionandroid:name="ent.action.MAIN"/>
<categoryandroid:name="ent.category.LAUNCHER"/> </intent-filter></activity>应用程序的入口该活动优先级最高-12-<action>子元素一个<intent-filter>中可以添加多个<action>子元素,例如:<intent-filter>列表中的Action属性不能为空,否则所有的Intent都会因匹配失败而被阻塞。所以一个<intent-filter>元素下至少需要包含一个<action>子元素,这样系统才能处理Intent消息。<intent-filter> <actionandroid:value="ent.action.VIEW"/> <actionandroid:value="ent.action.EDIT"/> <actionandroid:value="ent.action.PICK"/> ......</intent-filter>-13-<category>子元素一个<intent-filter>中也可以添加多个<category>子元素,例如:与Action一样,<intent-filter>列表中的Category属性不能为空。Category属性的默认值“ent.category.DEFAULT”是启动Activity的默认值,在添加其他Category属性值时,该值必须添加,否则也会匹配失败。<intent-filter> <categoryandroid:value="ent.category.DEFAULT"/> <categoryandroid:value="ent.category.BROWSABLE"/><intent-filter>-14-<data>子元素-1
一个<intent-filter>中可以包含多个<data>子元素,用于指定组件可以执行的数据,例如:<intent-filter> <dataandroid:mimeType="video/mpeg" android:scheme="http" android:host="com.example.android" android:path="folder/subfolder/1" android:port="8888"/> <dataandroid:mimeType="audio/mpeg" android:scheme="http" android:host="com.example.android" android:path="folder/subfolder/2" android:port="8888"/> <dataandroid:mimeType="audio/mpeg" android:scheme="http" android:host="com.example.android" android:path="folder/subfolder/3" android:port="8888"/></intent-filter>模式MIME类型,Intent对象和过滤器都可以用“*”通配符匹配子类型字段,如“text/*”,“audio/*”表示任何子类型主机路径端口-15-<data>子元素-2数据检测既要检测URI,也要检测数据类型。可参考如下规则:一个Intent对象既不包含URI,也不包含数据类型:仅当过滤器也不指定任何URI和数据类型时,检测才不能通过;否则都能通过。一个Intent对象包含URI,但不包含数据类型:仅当过滤器也不指定数据类型,同时它们的URI匹配,才能通过检测。例如,mailto:和tel:都不指定实际数据。一个Intent对象包含数据类型,但不包含URI:仅当过滤也只包含数据类型且与Intent相同,才通过检测。一个Intent对象既包含URI,也包含数据类型(或数据类型能够从URI推断出):数据类型部分:只有与过滤器中之一匹配才算通过;URI部分:要出现在过滤器中,或者它有content:或file:URI,又或者过滤器没有指定URI。换句话说,如果它的过滤器仅列出了数据类型,组件假定支持content:和file:。如果一个Intent能够通过不止一个活动或服务的过滤器,用户可能会被问哪个组件被激活。如果没有找到目标,就会产生一个异常。-16-IntentFilter类IntentFilter类是另外一种实现IntentFilter的方法:方法功能描述IntentFilter()IntentFilter类的构造方法,IntentFilter类提供了四种构造函数:IntentFilter()、IntentFilter(Stringaction)、IntentFilter(Stringaction,StringdataType)和IntentFilter(IntentFiltero)addAction(Stringaction)为IntentFilter添加匹配的行为例如添加电量低行为:addAction(ACTION_BATTERY_LOW)addCategory(Stringcategory)为IntentFilter添加匹配类别,如addCategory(CATEGORY_LAUNCHER)addDataAuthority(Stringhost,Stringport)获取IntentFilter的数据验证,如addDataAuthority(myhost,8888)。Host参数可以包含通配符*表示任意匹配,port为空表示可匹配任何端口countActions()计算IntentFilter包含的Action数量countDataAuthorities()计算IntentFilter包含的DataAuthority数量getDataAuthority(intindex)根据index获取IntentFilter的DataAuthoritygetAction(intindex)根据index获取IntentFilter的ActionsetPriority(intpriority)设置IntentFilter的优先级,默认优先级为0。通常priority值介于-1000到1000之间。Android系统根据优先级匹配IntentgetPriority()获取IntentFilter的优先级hasCategory(Stringcategory)判断category是否在Intent中,若包含返回ture,否则返回falsematchCategories(Set<String>categories)基于类别categories匹配IntentFilter,若匹配IntentFilter所有的类别则返回null,否则返回第一个不匹配的类别名字-17-广播接收IntentAndroid中,可以通过实现广播接收器来监听和响应这些广播的Intent。通常广播Intent用于向监听器通知系统事件或应用程序事件,从而扩展应用程序间的事件驱动的编程模型。广播Intent可以使应用程序更加开放,通过使用Intent来广播一个事件,可以在不用修改原始应用程序的情况下,对事件作出反应。Android中大量使用广播Intent来广播系统事件,如电池电量、网络连接和来电。-18-广播和接收Intent机制实现广播和接收Intent机制包含四个步骤:注册相应的广播接收器(BroadcastReceiver),广播接收器是接收广播消息并对消息作出反应的组件;发送广播,该过程将消息内容和用于过滤的信息封装起来,并广播给广播接收器;满足条件的广播接收器执行接收方法onReceiver();销毁广播接收器。-19-注册首先继承BroadcastReceiver,并重写onReceive()方法publicclassMyReceiverextendsBroadcastReceiver{ @Override publicvoidonReceive(Contextcontext,Intentintent){ /*添加onReceive代码处理*/ }}<receiverandroid:name=".MyReceiver"> <intent-filter> <actionandroid:name="vider.Telephony.SMS_RECEIVED"/> </intent-filter></receiver>IntentFiltermyfilter =newIntentFilter("vider.Telephony.SMS_RECEIVED");MyReceivermyreceiver=newMyReceiver();Context.registerReceiver(myreceiver,myfilter);然后根据IntentFilter注册广播Intent,Android提供了两种Java和XML注册方法。Java注册XML注册-20-广播Activity的sendBroadcast()、sendOrderBroadcast()和sendStrikyBroadcast()方法都可以广播Intent到广播接收器,满足条件的BroadcastReceiver都会执行onReceiver方法。三个方法的区别是:sendBroadcast():这种方式不严格保证执行顺序。sendOrderBroadcast():这种方式保证执行顺序,根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行onReceiver()方法,高优先级的BroadcastReceiver执行先于低优先级的。sendStrikyBroadcast():这种方式提供了带有“粘着”功能且一直保存sendStrikyBroadcast()发送的Intent,以便在使用registerReceiver()注册接收器时,新注册的Receiver的Intent对象为该Intent对象。-21-接收广播接收器收到广播Intent,对Intent进行判断。如果该接收器满足条件,则执行onReceiver()方法。-22-销毁广播接收器的onReceive()方法执行完后,其实例就会被销毁。执行onReceive()时,Android系统会启动一个程序计时器,如果在一定的时间内onReceive()方法没有完成,该程序会被认为无响应。因此onReceiver()方法里需要包含快速执行的逻辑,否则会弹出程序无响应的对话框。-23-设置Activity许可-1Android系统会在运行时检查该用户程序是否有权限调用该底层应用,因此需要通过某种方式设置Activity许可才能运行相应的应用。在AndroidManifest.xml中可以配置应用程序的权限,例如打电话应用需要调用系统提供的电话底层处理ACTION_CALL行为,这时需要在AndroidManifest.xml中的<uses-permission>添加打电话的许可属性:<uses-permissionandroid:name="android.permission.CALL_PHONE"></uses-permission>/*这样用户就能使用ACTION_CALL来激活打电话的应用。如果不在清单文件(AndroidManifest.xml)中设置许可,则运行电话应用时会弹出提示用户缺少相应权限的异常错误。*/-24-设置Activity许可-2Android系统提供的主要的许可:许可名字许可功能android.permission.ACCESS_CHECKIN_PROPERTIES允许读写在checkin数据库中的“properties”表android.permission.ACCESS_COARSE_LOCATION允许程序通过访问CellID或WIFI热点来获取粗略的位置android.permission.BLUETOOTH允许程序同匹配的蓝牙设备建立连接android.permission.CALL_PHONE允许程序拨打电话,无需通过拨号器的用户界面确认ndroid.permission.CLEAR_APP_CACHE允许用户清除该设备上的所有安装程序的缓存android.permission.CLEAR_APP_USER_DATA允许程序清除用户数据android.permission.CONTROL_LOCATION_UPDATES允许启用/禁止无线模块的位置更新android.permission.PROCESS_OUTGOING_CALLS允许程序监视、修改或者删除已拨电话android.permission.READ_INPUT_STATE允许程序获取当前按键状态android.permission.REBOOT请求用户设备重启的操作android.permission.RECEIVE_BOOT_COMPLETED允许一个程序接收到系统启动后的广播ACTION_BOOT_COMPLETEDandroid.permission.RECEIVE_MMS允许程序处理收到MMS彩信android.permission.RECEIVE_SMS允许程序处理收到短信息android.permission.SET_TIME_ZONE允许程序设置系统时区android.permission.SET_WALLPAPER允许程序设置手机壁纸-25-设置Activity许可-3android.permission.STATUS_BAR允许程序打开、关闭或禁用状态栏及图标android.permission.WRITE_CALENDAR允许程序写入但不读取用户日历android.permission.WRITE_CONTACTS允许程序写入但不读取用户联系人数据android.permission.WRITE_GSERVICES允许程序修改Google服务地图android.permission.WRITE_SETTINGS允许程序读取或修改系统设置android.permission.WRITE_SMS允许程序修改短信android.permission.DELETE_CACHE_FILES允许程序删除缓存文件android.permission.DELETE_PACKAGES允许程序删除包android.permission.DEVICE_POWER允许访问底层电源管理android.permission.DISABLE_KEYGUARD允许程序禁用键盘锁android.permission.DUMP允许程序获取系统服务的状态dump信息android.permission.GET_ACCOUNTS允许访问AccountsService中帐户列表android.permission.GET_PACKAGE_SIZE允许程序获取任何package占用空间大小android.permission.GET_TASKS允许程序获取当前或最近运行的任务的概要信息android.permission.HARDWARE_TEST允许访问程序系统硬件android.permission.INJECT_EVENTS允许一个程序截获用户事件如按键、触摸、回滚等-26-设置Activity许可-4android.permission.INSTALL_PACKAGES允许程序安装包android.permission.INTERNAL_SYSTEM_WINDOW允许打开系统用户界面窗口android.permission.EXPAND_STATUS_BAR允许程序拉伸或者缩小状态栏android.permission.INTERNET允许程序打开网络套接字android.permission.MODIFY_AUDIO_SETTINGS允许程序修改系统音频设置android.permission.MODIFY_PHONE_STATE允许修改电话状态如充电android.permission.MOUNT_UNMOUNT_FILESYSTEMS允许挂载和反挂载移动设备android.permission.SET_ACTIVITY_WATCHER允许程序监视和控制系统activities的启动android.permission.SET_ALWAYS_FINISH允许程序控制是否活动在处于后台时立即结束android.permission.SET_DEBUG_APP配置一个用于调试的程序android.permission.SET_ORIENTATION允许通过底层应用设置屏幕方向android.permission.SET_PREFERRED_APPLICATIONS允许程序修改默认程序列表android.permission.SET_PROCESS_FOREGROUND允许程序强制将当前运行程序转到前台运行android.permission.SET_PROCESS_LIMIT允许设置最大的系统当前运行进程数量android.permission.ACCESS_LOCATION_EXTRA_COMMANDS允许应用程序使用额外的位置提供命令android.permission.ACCESS_MOCK_LOCATION允许程序创建用于测试的模拟位置提供android.permission.ACCESS_NETWORK_STATE允许程序获取网络状态信息android.permission.ACCESS_SURFACE_FLINGER允许程序获取SurfaceFlinger底层
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 千图网特邀设计师
- 家务任务:成长必修课
- Ivacaftor-13C6-VX-770-sup-13-sup-C-sub-6-sub-生命科学试剂-MCE
- 福安经济开发区锂电新能源配套产业小微园区项目可行性研究报告
- 2025年航空发动机维修技术革新与维修政策法规解读报告
- 2025年环境监测物联网在环境监测领域的物联网技术应用与产业发展报告
- 2025年医疗器械国产化替代的关键技术与产业布局报告
- 多式联运信息平台功能优化与协同发展在物流园区运营中的应用探索报告
- 教育信息化基础设施建设在智能教育评价系统中的应用报告
- 2025年纺织服装行业智能化生产智能化生产设备技术升级项目实施报告
- GB/T 19964-2024光伏发电站接入电力系统技术规定
- MSDS基础知识培训课件
- 吸入剂的正确使用
- 疝气护理课件
- 《造林绿化落地上图操作技术规范》
- 国企基金公司招聘考试题
- 烧伤科普讲座课件
- 小学语文课前预习有效指导的研究结题报告
- 《狼性企业文化》课件
- 智慧能源管理平台建设方案书
- 地类及变化原因划分、数据库结构、森林资源变化图斑现地核实表、年度更新统计报表
评论
0/150
提交评论