•Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。
•Intent由动作、数据、分类、类型、组件、扩展信息、标记等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法。
Action属性
•Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动作,如ACTION_CALL(打电话)等。
•通常与Data一般匹配使用
打开拨号页面ACTION_DIALIntentintent= new Intent();
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);
一、
Uriuri= Uri.parse("tel:10086");
Intentintent= new Intent(Intent.ACTION_CALL,uri);
startActivity(intent);
二、
Manifest里需要添加CALL_PHONE权限
android:name="android.permission.CALL_PHONE">
三、
危险权限需要动态申请。
Data属性 打开拨号页面,自动添加号码Intentintent =
new Intent();
intent.setAction(Intent.ACTION_DIAL);
Uriuri= Uri.parse("tel:10086");
intent.setData(uri);
startActivity(intent);
发送短信,自动添加号码
Uriuri= Uri.parse("smsto:10086");
Intentintent =
new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(uri);
startActivity(intent);
Category属性
•Category属性指明一个执行Action的分类
•Intent中定义了一系列Category属性常量
按home键时启动自己做的应用
Component属性
一、Component属性用于指明Intent的目标组件的类名称。
二、通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后,Intent的其他属性都是可选的。
三、根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:
显式Intent,这种方式通过直接指定组件名称Component来实现;
隐式Intent,这种方式通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。
显式Intent通过setComponent()、setClassName()或setClass()设置组件名
一、
Intent intent = new Intent();
ComponentName name = newComponentName(IntentActivity.this,MainActivity.class);
intent.setComponent(name);
startActivity(intent);
二、
Intent intent = new Intent();
intent.setClass(IntentActivity.this,MainActivity.class);
三、
Intent intent = new Intent();
intent.setClassName(IntentActivity.this,"com.ugrow.day02.MainActivity");
Extra属性
Extra属性用于添加一些附加信息
通过使用Intent对象的putExtra()方法来添加附加信息
Intent intent = new Intent();
intent.putExtra("name","zhangsan");
通过使用Intent对象的getXXXExtra()方法可以获取附加信息。
例如,将上面代码存入Intent对象中的人名获取出来,
因存入的是字符串,所以可以使用getStringExtra()方法获取数据
String name=intent.getStringExtra("name");
Extra属性 Bundle存:
Intentintent = new Intent();
Bundlebundle =
new Bundle();
bundle.putString("user",user.getText().toString());
bundle.putString("pwd",pwd.getText().toString());
intent.putExtras(bundle);
取:
Bundle extras =getIntent().getExtras();
String user =extras.getString("user");
Stringpwd = extras.getString("pwd");
Type属性Intent intent = new Intent();
Uri uri =Uri.parse("file:///data/vivo.mp4");
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"video/*");
startActivity(intent);
Flag属性
Flag属性用来设定Activity的启动模式,与清单文件中的设置launchMode属性值相同
Intentintent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent.FLAG_ACTIVITY_CLEAR_TOP = singleTask
Intent.FLAG_ACTIVITY_SINGLE_TOP = singleTop
Intent.FLAG_ACTIVITY_NEW_TASK = singleInstance
PermissionAction 属性
一、
Uriuri= Uri.parse("tel:10086");
Intentintent= new Intent(Intent.ACTION_CALL,uri);
startActivity(intent);
二、
Manifest里需要添加CALL_PHONE权限
android:name="android.permission.CALL_PHONE">
三、
危险权限需要动态申请。
Permission
权限申请:Android
6.0 (API23)开始引入了权限申请机制,将所有权限分成了正常权限和危险权限
1、Manifest添加权限
2、判断系统是否大于等于6.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 系统大于等于6.0
} else {
// 小于6.0
}
3、检查是否拥有此权限
4、申请权限
ActivityCompat.requestPermissions(PermissionActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
5、权限回调 重写onRequestPermissionsResult
Intent启动Intent启动不同组件的方法:
启动ActivityA页面跳转B页面
一、A页面传值给B页面
startActivity() (putExtra,Bundle)
二、B页面传值给A页面
startActivityForRestult()
setResult(resultCode,Intent)
onActivityResult
一、Intent intent = new Intent();
intent.setClass(LoginActivity.this,IntentActivity.class);
startActivityForResult(intent,1000);
二、 Intent intent = new Intent();
intent.putExtra("message","消息已收到");
setResult(1001,intent);
finish();
三、protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1000 && resultCode == 1001){
String message = data.getStringExtra("message");
Log.d("TAG","message=="+message);
}
}



