Intent的七大组件——Android开发之路5
------Intent------
Android中三个核心组件——Activity、Services、BroadCastProvider都是通过Intent传递参数。
- startActivity(Intent)/startActivityForResult(Intent):来启动一个Activity
- startService(Intent)/bindService(Intent):来启动一个Service
- sendBroadcast:发送广播到指定BroadcastReceiver
Intent分类:根据是否使用组件名来查找目标Activity,意图可以分为显示意图和隐式意图
- 显式Intent:通过组件名指定启动的目标组件:startActivity(new Intent(A.this,B.class)); 每次只能启动一个组件。使用场景:在同一个应用中,或者其他应用的主界面
- 隐式Intent:不指定组件名,而是指定Intent的Action,Data,或Category,(action、data、category在AndroidManifest.xml中配置),当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框。使用场景:在不同的应用中
Intent的七大组件:
1、ComponentName(组件名)
Intent intent = new Intent();
//第一个参数是包名,在Manifest.xml中配置好的包名,第二参数是要跳转的Activity的包名.类名
ComponentName componentName1 = new ComponentName("包名",包名.类名"); intent.setComponent(componentName1); startActivity(intent);
2、Action(活动)
Action表示想要启动的Activity要完成什么动作,通常将Action、Category属性结合使用。使用动作启动Activity需要两个步骤:
1、在目标Activity清单文件中,添加意图过滤器<intent-filter>
<action>不单独使用,要和Category结合使用。动作可以自定义,类别不能自定义。
<intent-filter>
<action android:name="haha" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
2、创建意图对象,调用setAction、addCategroy方法
//1创建意图
Intent intent=new Intent();
//2设置动作
intent.setAction("haha");
//3添加类别
intent.addCategory(Intent.CATEGORY_DEFAULT);
//intent.addCategory("android.intent.category.DEFAULT");
//4启动
startActivity(intent);
好处:实现了Intent与某个具体的Activity分离,降低了耦合性,由系统决定启动那个Activity。
|
常量 |
目标组件 |
动作 |
|
ACTION_MAIN |
activity |
任务的主Activity,无输入数据和返回值 |
|
ACTION_VIEW |
activity |
浏览试图,根据不同的Data类型, 显示特定的数据 |
|
ACTION_DIAL |
activity |
系统拨号器,需要拨号数据 |
|
ACTION_CALL |
activity |
打电话,需要拨号数据 |
3、Category(类别)
当Action相同时,靠Category属性来细化和区分。它可以配合Action属性构成了<intent-filter>,常用Category属性常量:
CATEGORY_DEFAULT:(android.intent.category.DEFAULT) Android系统中默认的执行方式,按照普通Activity的执行方式执行。
CATEGORY_HOME: (android.intent.category.HOME) 设置该组件为Home Activity(显示桌面)。
CATEGORY_LAUNCHER: (android.intent.category.LAUNCHER) 设置该组件为在当前应用程序启动器中优先级最高的Activity,通常与程序入口动作ACTION_MAIN配合使用。
4、Data(数据)
Data属性通常用于向Action属性提供重要操作的数据。例如拨打指定电话、发送短信指定电话号码和内容等数据。Data属性的值是一个Uri(统一资源标识符)对象。
Uri的格式如下:scheme://host:port/path (协议-主机-端口-路径)
URL Uniform Resource Locator 统一资源定位符 (网址)
URI Uniform Resource Indentifier 统一资源标识符 (包含网址)
//1创建意图
Intent intent=new Intent();
//2设置动作
intent.setAction("hehe");
//3添加类别
intent.addCategory(Intent.CATEGORY_DEFAULT);
//4设置数据
intent.setData(Uri.parse("gdp://www.baidu.com"));
//intent.setData(Uri.parse("gdp:www.baidu.com"));
//4启动
startActivity(intent);
//AndroidManifest.xml中需要配置action、data、category
<intent-filter>
<action android:name="hehe" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="gdp" />
</intent-filter>
系统内置的几个Data属性常量:
tel: 号码数据格式,后跟电话号码。
mailto: 邮件数据格式,后跟邮件收件人地址。
smsto: 短信数据格式,后跟短信接收号码。
file:/// 文件数据格式,后跟文件路径。 要有三个斜线 ///
intent.setDataAndType(Uri.parse("file:///wenjianlujing"), "audio/*");
content:// 内容数据格式,后跟需要读取的内容。
5、Type(类型)
Type属性用于指定Data所指定的Uri对应的MIME类型
主要用于调用系统app,实现查看文件(如文本、图片、视频、音频等),通过指定文件的MIME类型,让系统知道用什么程序打开该文件。
Intent中设置Type的方法:
(1)setType("XXX/xxx");//在调用短信的时候使用
(2)setDataAndType(uri,"XXX/xxx");
//1创建意图
Intent intent=new Intent();
//2设置动作
intent.setAction("gaga");
//3添加类别
//4设置数据类型
intent.setDataAndType(Uri.parse("mdp://www.baidu.com"), "xxx/yyy");
//5启动
startActivity(intent);
AndroidManifest.xml中需要配置:data 和 type 的配置都在data中:
<intent-filter>
<action android:name="gaga"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="mdp" android:mimeType="xxx/yyy"/>
</intent-filter>
6、Extras(扩展)
发送短信给多人,包含内容:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("smsto:10086,110"));
intent.putExtra("sms_body", "你好,好久不见");
startActivity(intent);
发送邮件:
// 发送邮件action
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); // 文本格式
emailIntent.setType("text/plain"); // 对方邮件地址
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
"2654828081@qq.com"); // 标题内容
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "标题内容"); // 邮件文本内容
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "邮件内容"); // 弹出能够匹配要求的所有邮箱APP,点击选择
startActivity(Intent.createChooser(emailIntent, "Choose Email Client"));
7、Flags(标志)
发送邮件
// 发送邮件action
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); // 文本格式
emailIntent.setType("text/plain"); // 对方邮件地址
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
"****@qq.com"); // 标题内容
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "标题内容"); // 邮件文本内容
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "邮件内容"); // 弹出能够匹配要求的所有邮箱APP,点击选择
startActivity(Intent.createChooser(emailIntent, "Choose Email Client"));
Intent启动的几种方式:
// 1.第一种
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
// 2.第二种
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 3.第三种
Intent intent = new Intent();
ComponentName componentName1 = new ComponentName(
"com.example.day06_componentname",
"com.example.day06_componentname.SecondActivity");
intent.setComponent(componentName1);
startActivity(intent);
// 4.第四种
Intent intent = new Intent();
intent.setClassName("com.android.camera", "com.android.camera.Camera");
startActivity(intent);
// 5.第五种
Intent intent2 = new Intent();
ComponentName componentName = new ComponentName(MainActivity.this,
SecondActivity.class);
intent2.setComponent(componentName);
startActivity(intent2);
Intent的七大组件——Android开发之路5的更多相关文章
- android开发之路10(文件的读写)
1.安卓中文件的数据存储实例(将文件保存到手机自带存储空间中): ①MainActivity.java public class MainActivity extends Activity imple ...
- android开发之路05
一.获取res资源文件下values中内容的方式: 1.string.xml文件-------------------------------> 取值方式:getResource().getSt ...
- android开发之路02(浅谈BroadcastReceiver)
一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...
- android开发之路12(android四大组件&Fragment&AsyncTask类)
一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...
- 菜单(Menu)的三中创建方式——Android开发之路2
菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...
- android开发之路11(用SharedPreferences存储数据)
Android平台给我们提供了一个SharedPreferences类,实际上SharedPreferences处理的就是一个key-value(键值对),它是 一个轻量级的存储类,特别适合用于保存软 ...
- android开发之路09(浅谈SQLite数据库01)
1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...
- android开发之路04(初级android工程师必会,你懂得!)
Android初级Android工程师重点掌握内容如下: 1.Android开发基础: ①UI界面设计: ②SQLite数据库: ③android四大组件: ④android网络编程: ⑤androi ...
- android开发之路03
一.Activity1.如何在一个应用程序中定义多个Activity:①定义一个类,继承Activity:②在该类当中,复写Activity当中的onCreate方法:③在AndroidManifes ...
随机推荐
- IOS入门之Swift语言(一)
经过不断的努力,小哥也买了台苹果设备,终于可以开始我的IOS之旅了,说来确实令人苦恼,为了学习IOS我这着贫农阶级,省了几个月的零花钱,外加向亲朋好友求救,最终痛下心扉,卖了台MAC pro128G版 ...
- TSQL语句练习题
1. 查询Student表中的所有记录的Sname.Ssex和Class列. select Sname,Ssex,Class from Student 2. 查询教师所有的单位即不重复的Depart列 ...
- 在Windows环境中开始Docker的学习和体验
研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...
- IOS开发之微信山寨版
为了犒劳自己的学习内容,就山寨个微信的视图控制吧.拿着微信,仔细的看了一下,主要用到了TabBarController以及配置TabBarItem, NavigationController以及配置N ...
- 如何将MySQL help contents的内容有层次的输出
经常会遇到这种情况,在一个不能上网的环境通过MySQL客户端登录数据库,想执行一个操作,却忘了操作的具体语法,各种不方便. 其实,MySQL数据库内置了帮助文档,通过help contents即可查看 ...
- 【经验之谈】Windows环境下配置WordPress
前言 wordpress全球著名的开放博客平台,拥有成千上万个各式插件和不计其数的主题模板样式,使用php和mysql搭建,下面说下载windows环境下配置wordpress,经验之谈. 安装 关于 ...
- Callbacks vs Events
前言:本文翻译自Dean Edwards的一篇文章,原文地址:http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/. 文章主要指出了 ...
- Vertica的date与timestamp数据类型,to_date()与to_timestamp()函数区别
实验环境:3节点,RHEL6.4 + Vertica 7.0.1 实验目的:了解Vertica数据库的date与timestamp数据类型,to_date()与to_timestamp()函数区别 ...
- 浅谈C#中一种类插件系统编写的简单方法(插件间、插件宿主间本身不需要通信)
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 三年多前还在上研时,用C#+反射机制写过插件系统,后来又用M ...
- 使用GIT@OSChina 实现协同工作的方法。
由于我新建了一个团队,团队里的人对于GIT都不太熟悉,所以才有了这篇文章.我用的是git-1.9.4的版本,所以我建议团队里面的成员也使用这个版本.首先是下载git,这个自己去网上找吧,一大堆,记得是 ...