Android之Intent详解

上传人:l**** 文档编号:137842917 上传时间:2020-07-12 格式:PPT 页数:11 大小:203KB
返回 下载 相关 举报
Android之Intent详解_第1页
第1页 / 共11页
Android之Intent详解_第2页
第2页 / 共11页
Android之Intent详解_第3页
第3页 / 共11页
Android之Intent详解_第4页
第4页 / 共11页
Android之Intent详解_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Android之Intent详解》由会员分享,可在线阅读,更多相关《Android之Intent详解(11页珍藏版)》请在金锄头文库上搜索。

1、什么是intent,Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android 会根据Intent的内容,查询各组件注册时的声明的IntentFilter,找到网页浏览器Activity来浏览网页。,Android如何解析Intent,在应用中,我们可以以两

2、种形式来使用Intent:直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此Intent的组件。,Intent解析,对于直接Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接Intent,通过解析,将 Intent映

3、射给可以处理此Intent的Activity、IntentReceiver 或Service。Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下:如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;如果Intent没有提供type,系统将从data中得到数据类型。和ac

4、tion一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto: ) 进行匹配。同上,Intent 的scheme必须出现在目标组件的scheme列表中。如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类

5、别。,Intent的匹配,对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”。对于没有明确指出目标组件名称的Intent,则称之为“隐式Intent”。Android系统使用Intent Filter 来寻找与隐Intent相关的对象。 显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。

6、,显式intent,public void onClick(View v) Intent intent=new Intent(); intent.putExtra(string,获得了Activity01的数据); intent.setClass(this, Activity02.class); this.startActivity(intent); 代码简洁明了,执行了onClick()函数,就会马上跳转到名为Activity02的Activity中 ,并将参数带入到Activity中。,隐式intent,在显式Intent消息中,决定目标组件的唯一要素就是组件名称,因此,如果你的Inten

7、t中已经明确定义了目标组件的名称,那么你就完全不用再定义其他Intent内容。而对于隐式Intent则不同,由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。具体的选择方法是:Android将Intent的请求内容和一个叫做Intent Filter的过滤器比较,Intent Filter中包含系统中所有可能的待选组件。如果Intent Filter中某一组件匹配隐式Intent请求的内容,那么Android就选择该组件作为该隐式Intent的目标组件。,隐式intent例子,public void onClick(View v) Ur

8、i uri=Uri.parse(smsto:0800000123); Intent intent=new Intent(Intent.ACTION_SENDTO,uri); intent.putExtra(sms_body,the sms text); startActivity(intent); 执行onClick()方法,会执行进入到系统自带的发短信窗口。,附录,用Intent调用系统中经常被用到的组件 1 ,web浏览器 Uri uri = Uri. parse ( ); returnIt = new Intent (Intent . ACTION_VIEW , uri ); 2,地图

9、Uri mapUri = Uri. parse ( geo:38.899533,-77.036476 ); returnIt = new Intent (Intent . ACTION_VIEW , mapUri); 3,调拨打电话界面 Uri telUri = Uri. parse ( tel:100861 ); returnIt = new Intent (Intent . ACTION_DIAL , telUri); 4,直接拨打电话 Uri callUri = Uri. parse ( tel:100861 ); returnIt = new Intent (Intent . ACTI

10、ON_CALL , callUri);,5,卸载 Uri uninstallUri = Uri. fromParts ( package , xxx , null ); returnIt = new Intent (Intent . ACTION_DELETE , uninstallUri); 6,安装 Uri installUri = Uri. fromParts ( package , xxx , null ); returnIt = new Intent (Intent . ACTION_PACKAGE_ADDED , installUri); 7,播放 Uri playUri = Ur

11、i. parse ( file:/sdcard/download/everything.mp3 ); returnIt = new Intent (Intent . ACTION_VIEW , playUri); 8,调用发邮件 Uri emailUri = Uri. parse ( mailto: ); returnIt = new Intent (Intent . ACTION_SENDTO , emailUri); 9,发邮件 returnIt = new Intent (Intent . ACTION_SEND ); String tos = “ ; String ccs = “ ;

12、returnIt .putExtra(Intent . EXTRA_EMAIL , tos); returnIt .putExtra(Intent . EXTRA_CC , ccs); returnIt .putExtra(Intent . EXTRA_TEXT , body ); returnIt .putExtra(Intent . EXTRA_SUBJECT , subject ); returnIt .setType( message/rfc882 ); Intent . createChooser ( returnIt , Choose Email Client );,10,发短信

13、Uri smsUri = Uri. parse ( tel:100861 ); returnIt = new Intent (Intent . ACTION_VIEW , smsUri); returnIt.putExtra( sms_body , shenrenkui ); returnIt.setType( vnd.android -dir/mms-sms ); 11,直接发邮件 Uri smsToUri = Uri. parse ( smsto:/100861 ); returnIt = new Intent (Intent . ACTION_SENDTO , smsToUri); returnIt.putExtra( sms_body , “test ); 12,发彩信 Ur i mmsUri = Uri. parse ( content:/media/external/images/media/23 ); returnIt = new Intent (Intent . ACTION_SEND ); returnIt.putExtra( sms_body , “test ); returnIt.putExtra(Intent . EXTRA_STREAM , mmsUri); returnIt.setType( image/png );,谢谢观看! 2020,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号