天天看点

Android Intent详解

一、什么是Intent 一个意图是一个可以向组件 请求一个动作的 消息传递对象,即各组件使用Intent进行通信 。Intent促进组件之间的通信有这基本3个方面: 1.)启动Activity startActivity()或者startActivityForResult()来启动一个Activity 2.)启动Service startService()来初始化或者发送新的指令到正在运行的Service bindService()来实例化并且绑定Service

3.)发送Broadcast  sendBroadcast(), sendOrderedBroadcast()或者 sendStickyBroadcast().来发送广播到指定的BroadcastReceiver

二、显示Intent与隐式Intent的区别

显示Intent 通过组件的名称(组件的全类名)来指定目标的组件,在自己的应用程序中使用显示Intent启动一个组件,因为你知道你想要启动的Activity或者 Service的类名。 例如Activity启动其他的Activity或者Service,启动的组件只有一个。
隐式Intent 在启动组件的Intent中不指名组件的名称,而是指定Action、Data、 Category属性,然后当我们调用启动组件的方法时,就会 去AndroidManfiest.xml中相关组件的Intent-filter,逐一匹配出满足属性的组件。如果不止一个的话,会弹出让我们选择的对话框。

三、Intent的属性

ComponentName(组件名称) 即组件的名称,在AndroidManfiest.xml配置文件中设置的包名+组件的全限定类名组成,这是显式Intent需要的设置的唯一属性。 Intent中有setClass()、setClassName()、 setComponent()方法来设置,使用getComponent()方法获取
Action(动作) 一个普通的字符串,代表Intent要完成的一个抽象"动作" 比如发信息的权限,而具体的那个组件来完成,Intent并不负责,仅仅知道会有这个动作,谁来完成就交给Intent-filter进行筛选。 2种方式: 1.配置文件中 <action android:name="android.intent.action.CALL" /> 2.代码中 intent.setAction(Intent.ACTION_CALL);
Category(种类)

一个普通的字符串,为Action提供额外的类别信息,两者通常结合使用,一个Intent对象只能有一个Action,但能有多个Category

2种方式:

1.配置文件中

<category android:name="android.intent.category.

DEFAULT" />

2.代码中

intent.addCategory(Intent.CATEGORY_DEFAULT)

DATA(数据)

Data通常用于向Action属性提供操作的数据,接受一个URI对象。 URI格式:scheme://host:port/path  参数依次为:协议头、 主机、端口、路径

2种方式:

1.配置文件中

<data android:mimeType="Intent的Type属性"       android:scheme="Data的scheme协议头"       android:host="Data的主机号"       android:port="Data的端口号"       android:path="Data的路径"       android:pathPrefix="Data的path前缀"       android:pathPattern="Data属性的path的字符串模板"                     />

2.代码中

intent.setDataAndType(data, type);

Type(MIME类型) Type通常用于指定Data所制定的Uri队友的MIME类型
Extras(额外) 通常用于多个Activity之间的数据交换,Extras的属性是一个 Bundle对象,通过键值对进行数据存储。
Flags(标记) 表示不同来源的标记,多数用于Android如何启动Activity以及启动后如何处理。 比如: intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)相当于加载模式中的singleTop模式。

四、Inten的使用

显示Intent的使用

1.返回Home界面

Intent intent = new Intent(); intent .setAction(Intent.ACTION_MAIN); intent .addCategory(Intent.CATEGORY_HOME); startActivity(intent );

2.打开链接地址

Intent intent = new Intent(); intent .setAction(Intent.ACTION_VIEW); intent .setData(Uri.parse("http://www.baidu.com")); startActivity(intent );

3.启动Activity

Intent intent = new Intent(MainActivity.this,DemoActivity.class); startActivity(intent );

隐式Intent的使用

功能:所有Action为VIEW的Activity被筛选出来,由用户进一步选择: 核心代码流程: 建立第二个Activity的布局,与对应的Activity,在第一个Activity的按钮点击事件中添加一下代码:

Intent it = new Intent(); it.setAction(Intent.ACTION_VIEW); startActivity(it);

最后在配置文件中添加以下代码:        

<activity android:name=".SecondActivity"             android:label="第二个Activity">             <intent-filter>                 <action android:name="android.intent.action.VIEW"/>                 <category android:name="android.intent.category.DEFAULT"/>             </intent-filter>                   </activity>