Android提供了一种Intent机制,用于帮助您在APP应用程序之间进行交互和通信。 Intent不仅可以用于APP应用程序之间的交互,还可以用于APP应用程序中的活动、服务和broadcast receiver之间的交互。 Intent这个英语单词的本意是“目的、意图”。
Intent是一种运行时绑定机制,在程序运行时连接两个不同的组件。
1、使用startActivity (或startActivityForResult )通过intent启动活动。 setResult (,activity传递了返回结果的intent。
3358 www.Sina.com/(视图视图) {
intent http://www.Sina.com/=get intent (;
//Intentinten=new Intent (;
intent.putextra('message ','这是回复');
设置结果(101,intent );
finish (; //必须销毁
}
2、将intent对象传递给startService )以启动服务,或者向正在运行的服务发送消息。 intent对象(bindService ) )以绑定服务。
3、如果将intent对象传递到广播方法(如sendBroadcast (、sendOrderedBroadcast )或sendStickyBroadcast ) ),则它们将传递到broadcast receiver
包含在intent中的属性:七个属性:组件、操作、类别、日期、类型、附加和标志
Intent负责描述APP应用程序中一个操作的动作、动作相关的数据、附加数据,Android根据该Intent的描述,找到对应的组件,将Intent传递给调用的组件,然后将组件
分为明确的意图和隐含的意图。
一、明确意图:明确指定Intent的目标组件。 通常用于同一APP应用程序之间的跳转。
1 )组件:有意启动的组件
组件名称有三种类型的构造函数。
(1)组件名称(上下文,类) ) ) ) )。
)2)组件名称(上下文,字符串) )。
)3)组件名称(字符串包,字符串clz ) )。
其中表示类名的字符串必须使用整个类名。
jydhb只用于区分安卓APP。
也可以为不同的Android APP应用程序启动活动
intent.setcomponent(component
2 ) intent.setClass ()
3 )新英特尔(上下文,类) ) )。
缺点:无法调用其他APP应用程序的活动。
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。
//通过明确意图指定了要跳转的组件
//Intent intent=new Intent (;
//componentnamecomponent=newcomponentname (this、
//MyActivity.class; //
//intent.setclass(this,MyActivity.class; //
//intent.setcomponent () component;
//intentI=newintent(this,MyActivity.class; //
//开始活动(英特尔);
二、隐式意图:未明确指定组件名称的Intent是隐式意图,
Android系统根据隐式意图中设置的操作、类别、数据、URI和数据类型找到最佳的系统
组件来处理这个意图。一般用于不同应用程序之间的跳转。Android系统使用IntentFilter来寻找与隐式相关的组件。
(1)Action动作
用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在AndroidManifest.xml 的Activity 定义时,可以在其 <intent-filter >节点指定一个 Action列表用于标识 Activity 所能接受的“动作”。
(2)Category
为Action增加额外的附加条件(用来表现动作的类别),一般将action和category结合使用
Intent:只能包含一个Action,可以有多个Category在java代码中有多个action后者会覆盖前者,因此是没意义的
Activity:可以配置多种Action,可以配置多个Category,类别越多,动作越具体,意图越明确
a)每一个通过 startActivity() 方法发出的隐式Intent都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式Intent的 Activity 都应该包括"android.intent.category.DEFAULT"category,不然将导致 Intent 匹配失败
b)一个<intent-filter>至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。若Intent请求的Action和<intent-filter>中的某一个<action>匹配,那么该Intent就通过这条<intent-filter>的动作测试。
c)如<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这个<intent-filter>匹配
e)当Intent请求中包含并所有的Category与组件中某个IntentFilter的<category>完全匹配时,才会让该Intent请求通过测试
(3)Data 向Action属性提供操作的数据,Data属性接受一个Uri对象。
URI 通用资源标识符:在网络中或者本地如何找到一个唯一的资源的标识符
URL 统一资源定位符:把一个地址作为唯一的资源的标识符,
URN 统一资源命名符
格式:协议://地址:端口号/资源路径
一般情况下Activty可以有多个action,多个category,但是只能有一个data.
并且配置data之前需要先有action.
(4)Type 为Action属性提供操作的数据的数据类型
注意:在java代码中
1)Intent中不能单独设置Type,需要结合Action和Data一起使用
2)默认Data与Type不可以同时使用,后设置的属性会覆盖前设置的属性,可以使用setDataAndType()同时设置两个属性。
代码及常用action用法:
/***************************** 隐式意图 ************************************/
Intentintent = new Intent();
//是actvity的动作,配合意图过滤器AndroidManifest.xml
//<intent-filter>
//<action android:name="banwxf" />//可以有多个
//<category android:name="android.intent.category.DEFAULT" />//必须存在
//</intent-filter>
//如果配置了相同action的activity不止一个则会让你选择一个activity(可以设置优先级priority)
//当Intent匹配成功的组件有多个时,显示优先级高的组件,如果优先级相同,显示列表让//用户自己选择,优先级从-1000至1000,并且其中一个必须为负的才有效
intent.setAction("banwxf");//如果多条则,后者覆盖前者。没有意义
intent.addCategory("banwxf");//是action的附加条件,可以有多条该语句,但是只要满足其中的一个就可以
//intent只能包含一个action但是可以有多个category,但至少要有一个category
//<data android:scheme="banwxf"
//android:host="127.0.0.1"
//android:port="8888"
//android:path="/sa"/>
//data属性不需要写全,只能有一个data。用之前必须要有action
//如何将字符串转换为uri对象
Uriuri = Uri.parse("banwxf://127.0.0.1:8888/sa");// 此uri一定需要写全"scheme://host:port:path"
//intent.setData(uri);
//intent.setType("***/***");
//注意:data和type不能分开设置
intent.setDataAndType(uri,"abc/def");
startActivity(intent);
}
publicvoid myWeb(View view) {
//通过action掉用系统程序
Intentintent = new Intent();
intent.setAction(Intent.ACTION_VIEW);//ACTION_VIEW是一个引用,显示指定的对象
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
//播放音乐
publicvoid myMusic(View view) {
//通过action掉用系统程序
Intentintent = new Intent();
intent.setAction(Intent.ACTION_VIEW);//ACTION_VIEW是一个引用,显示指定的对象
//intent.setData(Uri.parse("file:///sdcard/muc.mp3"));
intent.setDataAndType(Uri.parse("file:///sdcard/muc.mp3"),"audio/mp3");
startActivity(intent);
}
//打电话
publicvoid call(View view) {
//通过action掉用系统程序
Intentintent = new Intent();
//intent.setAction(Intent.ACTION_CALL);//直接拨号
intent.setAction(Intent.ACTION_DIAL);//跳转到拨号界面
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
//写在程序
publicvoid delete(View view) {
//通过action掉用系统程序
Intentintent = new Intent();
intent.setAction(Intent.ACTION_DELETE);//删除程序
intent.setData(Uri.parse("package:com.example.mycompont"));//指定要卸载的应用
startActivity(intent);
}