Android中Intent的介绍
一.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的相关属性:
- Intent由以下各个组成部分:
- component(组件):目的组件
- action(动作):用来表现意图的行动
- category(类别):用来表现动作的类别
- data(数据):表示与动作要操纵的数据
- type(数据类型):对于data范例的描写
- extras(扩展信息):扩展信息(传值)
- Flags(标志位):期望这个意图的运行模式
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里面设置
- type(数据类型):对于data范例的描写
- 一个完整的Uri由scheme、host、port、path组成,格式是<scheme>://<host>:<port>/<path>
//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。
Android中Intent的介绍相关推荐
- Android中Intent介绍
Android中Intent主要分为显式Intent和隐式Intent,今天会主要讲隐式Intent 一.显式Intent 最常用的就是下面这种形式 Intent intent = new Inten ...
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
这篇文章转自博客园 Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putPa ...
- android集合方法,android中intent传递list或者对象的方法
本文实例讲述了android中intent传递list或者对象的方法.分享给大家供大家参考.具体实现方法如下: 方法一: 如果单纯的传递List 或者List的话 就可以直接使用 代码如下: inte ...
- Android 中intent传递序列化信息(传递类)
Android 中不同activity之间传递信息 一般Android 中不同activity之间传递信息通过intent. 传递普通的信息,直接通过intent.putExtra()来实现. 通过上 ...
- 【Android】Android中Intent的用法总结
转载▼ 来源:http://blog.sina.com.cn/s/blog_5f1fe33f0100n5e1.html Intent只在Android中特有,我把它比作一种运载工具,就像飞机一样,会 ...
- Android中Intent传递Object和ArrayListObject对象---笔记
首先看一下Intent的官方的API. 传递一些基本类型数据的方法如下: putExtra(String name, int value) putExtra(String name, String v ...
- 关于Android中Intent传递Serialzilable数据的问题
2019独角兽企业重金招聘Python工程师标准>>> 之前写程序,如果是队列数据的话,一般都是用ArrayList来作为存储介质,但是现在接手公司的新项目,因为之前这个公司是在wi ...
- Android中Intent.setAction简单使用
1首先大家需要在主界面中拖入一个按钮, 上代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- Android中的cookie介绍
android 客户端 Cookie处理 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). Cookie ...
- android中intent放数据类型,Android Intent传递数据底层分析详细介绍
Android Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...
最新文章
- tensorBoard 初级实现
- Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析
- nyoj 712 探寻宝藏
- SVM熟练到精通4:偏离点与松弛变量
- java葵花宝典_JAVA程序员想入职跳槽,这些基本功一定要做好,你给自己打几分?...
- 刘歧:让人生不留遗憾
- UNIX操作-命令快捷键
- .NET 4.0新增命名空间:System.Collections.Concurrent
- 闪光灯slave是什么意思_闪光灯实战讲解 | 室内光线+闪光灯使用配合=完美光效...
- java 获取本机的ip和mac_java获取本机ip和mac地址
- HLSL Tips 1:如何把输入映射到输出像素
- 演讲《云图,让阅读更精彩(Better Cloudary™, Better Reading)》
- hbase1.1.1 连接集群_hbase1.2.3集群搭建
- django 业务代码写哪儿_测试人员快速上手Django指南
- 推荐系统评测指标—精准率(Precision)、召回率(Recall)、F值(F-Measure)
- 软件工程4 用例建模
- 万维考试系统python_万维题库管理系统单机版(万维考试管理软件)V201706 最新官方版...
- 机器学习—确定系数R2
- notepad下载(官网进不去)
- 蓝桥杯练习 小明上楼梯(递归设计)
热门文章
- MPU6050-扫盲
- 2021-07-06
- ping结果中TTL是什么意思
- 实践数据湖iceberg 第十一课 测试分区表完整流程(造数、建表、合并、删快照)
- 好心情:抗抑郁药物的不良反应和处理措施
- 安卓仿苹果音量调节_安卓不仿苹果静音键?千万别小瞧“静音键”, 功能强悍到无敌!...
- 杭州电子科技大学acm--2020
- python plot_surface 画表面网格图
- 17.PIO源码详解7-PIO_EP_MEM_ACCESS模块(PIO_EP_MEM_ACCESS.v)剖析
- 开学倒计时,实验室里的这些准备工作你做完了吗?-LIMS2