赞
踩
一.Intent的介绍
Intent的中文意思是“意图,意向”, Intent对Android的核心和灵魂,是各组件之间的桥梁。四大组件分别为Activity 、Service、BroadcastReceiver、ContentProvider。
而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。
Intent的中文意思为“意图”,在Android中可以理解为想要做什么,What do want to do? 所以什么时候要用到Intent就很好理解了。
Activity、Service和Broadcast receiver之间是通过Intent进行通信的,而另外一个组件Content Provider本身就是一种通信机制,不需要通过Intent。
二.公共构造函数:
1、Intent() 空构造函数
2、Intent(Intent o) 拷贝构造函数
3、Intent(String action) 指定action类型的构造函数
4、Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider
5、Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的
6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体
Intent有六种构造函数,3、4、5是最常用的,并不是其他没用!
Intent(String action, Uri uri) 的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。
三.Intent的属性
Intent的相关属性:
1.component:目的组件
Intent的Compent属性指定Intent的的目标组件的类名称。
显示跳转
1、Intent跳转
Intent intent =new Intent(源Activity的对象,目标Activity的class);
startActivity(intent);
三种代码方式的跳转 其实代码都是一样
//No1
Intent intent = new Intent();
创建Intent组件来响应
ComponentName cpN = new ComponentName(MainActivity.this, OtherActivity.class);
intent.setComponent(cpN);
startActivity(intent);
//No2
Intent intent = new Intent();
intent.setClass(MainActivity.this, OtherActivity.class);
startActivity(intent);
//No3 更简单的
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
2.Action动作 用来表示意图的行动 不同应用之间使用Action跳转
category 类型 与Action是一起使用 不能少,也可以跳转,但是很含蓄
以下是Intent类中预定义的部分action:
ACTION_CALL--目标组件为activity, 代表拨号动作;
ACTION_EDIT--目标组件为activity, 代表向用户显示数据以供其编辑的动作;
ACTION_MAIN--目标组件为activity, 表示作为task中的初始activity启动;
ACTION_BATTERY_LOW--目标组件为broadcastReceiver, 提醒手机电量过低;
ACTION_SCREEN_ON--目标组件为broadcast, 表示开启屏幕.
3.data(数据):表示与动作要操纵的数据
表示android要访问的数据 也可以在intent_filter里面设置
//No6 播放音乐
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
// intent.setData(Uri.parse("file://storage/朋友.mp3"));
intent.setDataAndType(Uri.parse("file://storage/朋友.mp3"), "audio/mp3");
startActivity(intent);
4. Category属性
Intent中的Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息。
<category android:name="android.intent.category.DEFAULT"/> 默认 <category android:name="android.intent.category.LAUNCHER" /> 系统启动 |
5. Type属性
Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
6.Intent的Extra属性
Intent的Extra属性是添加一些组件的附加信息。比如,如果我们要通过一个Activity来发送一个Email,就可以通过Extra属性来添加subject和body。
// 调用浏览器 Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail"); Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri); // 调用地图 Uri mapUri = Uri.parse("geo:100,100"); Intent intent = new Intent(Intent.ACTION_VIEW, mapUri); // 播放mp3 Uri playUri = Uri.parse("file:///sdcard/test.mp3"); Intent intent = new Intent(Intent.ACTION_VIEW, playUri); intent.setDataAndType(playUri, "audio/mp3"); // 调用拨打电话 Uri dialUri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_DIAL, dialUri); // 直接拨打电话,需要加上权限 Uri callUri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_CALL, callUri); // 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的) Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com"); Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri); // 直接发邮件 Intent intent = new Intent(Intent.ACTION_SEND); String[] tos = { "zuolongsnail@gmail.com" }; String[] ccs = { "zuolongsnail@163.com" }; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_TEXT, "the email text"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.setType("text/plain"); Intent.createChooser(intent, "Choose Email Client"); // 发短信 Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra("sms_body", "the sms text"); intent.setType("vnd.android-dir/mms-sms"); // 直接发短信 Uri smsToUri = Uri.parse("smsto:10086"); Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri); intent.putExtra("sms_body", "the sms text"); // 发彩信 Uri mmsUri = Uri.parse("content://media/external/images/media/23"); Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra("sms_body", "the sms text"); intent.putExtra(Intent.EXTRA_STREAM, mmsUri); intent.setType("image/png"); // 卸载应用 Uri uninstallUri = Uri.fromParts("package", "com.app.test", null); Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri); // 安装应用 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive"); // 在Android Market中查找应用 Uri uri = Uri.parse("market://search?q=愤怒的小鸟"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); |
四.带返回结果的跳转
Intent intent = new Intent(MainActivity.this , OtherActivity.class);
// startActivity(intent);
//requestCode int 请求码
startActivityForResult(intent, requestCode);
必须覆写 当返回这个Activity的时候 响应
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
}
再另一个Activity上 设置结果码
//resultCode 结果码
this.setResult(resultCode)
//设置结果码切 往回传递数据
Intent in = new Intent();
in.putExtra("test", test);
this.setResult(2,in);
注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。
Intent Action 隐士跳转 自定义的
调用系统的Action 其中系统的data type这些需要去查API。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。