Intent与 android开发教程

  次阅读 来源:互联网(转载协议) 2016-01-14 09:31 我要评论(0)

耐心看完,你就能搞明白怎么Intent一个系统程序了。

@Intent结构

private String mAction;

private Uri mData;

private String mType;

private String mPackage;

private ComponentName mComponent;

private int mFlags;

private HashSet<String> mCategories;

private Bundle mExtras;

private Rect mSourceBounds;

@<intent-filter>元素与属性

intent-filter中有三个元素:action、category、data,这三个元素都是可以有多个的。

action和category元素只有android:name一条属性,而data则有scheme,host,prot,path,pathPrefix,pathPattem,mimeType七条属性。

@Intent中变量与intent-filter中元素对应关系

action与Intent中的mAction元素相对应;

category与Intent中的mCategories相对应;

data中的mimeType与Intent中的mType相对应;

data中的其余六条则与Intent中的mData相对应。

由此可见,Intent中与intent-filter相关的只有四个参数,mAction、mData、mType、mCategories,而这四个参数对应的操作如下:

Intent.setAction(String action);

Intent.addCategory(String category);

Intent.removeCategory(String category);

Intent.setType(String type);

Intent.setData(Uri data);

Intent.setDataAndType(Uri data, String type);

需要注意的是:setType会清空mData,而setData也会清空mType,如果要同时设置mType和mData则必须用setDataAndType。

这里的Uri=scheme://host:port/path。

如果没定义path、port、host则Uri=scheme://。

这里重点说一下path、pathPrefix和pathPattem:

path 用来匹配完整路径

pathPrefix 用来匹配路径的开头部分

pathPattem 用表达式来配置完整路径,"*"表示0个或多个其前面的字符,"."表示1个任意字符,".*"则可以表示0个或多个任意字符。

@Intent与intent-filter匹配规则

a、Intent定义的Action必须包含在<intent-filter>的Action列表总,若隐式Intent没有定义Action则系统会报错。

b、Intent若定义了Category(可多个),则所有Category必须包含在<intent-filter>的Category列表里,若Intent未定义Category则<intent-filter>中是否定义了Category都不受影响,<intent-filter>中必须包含<category android:name="android.intent.category.DEFAULT">才能通过startActivity启动,Service和Broadcast Receiver则不需要。

c、Intent若未定义Type,则其仅匹配同样没有定义Type的intent-filter,若定义了则必须在intent-filter中有相匹配的项。

d、Intent若未定义Uri,则其仅匹配同样没有定义uri的intent-filter,若定义了则必须在intent-filter中有相匹配的项。

@显式与隐式Intent

显式Intent通常用于程序内部间的组件通信,已经明确的定义了目标组件的信息,所以不需要系统决策用哪个目标组件,如:

Intent intent = new Intent(Context packageContext, Class<?> clas);

startActivity(intent);

隐式Intent不指明目标组件的class,只定义希望的Action、Category和Data,由系统决定使用哪个目标组件。这也是Android系统的一大亮点。

第三种,可以用PackageManager获取系统中安装的所有包,然后打开:

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

网友点评网友点评
阅读推荐阅读推荐

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...