------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(组件名)

  1. Intent intent = new Intent();
  2. //第一个参数是包名,在Manifest.xml中配置好的包名,第二参数是要跳转的Activity的包名.类名
  3. ComponentName componentName1 = new ComponentName("包名",包名.类名");
  4.  
  5. intent.setComponent(componentName1);
  6.  
  7. startActivity(intent);

2、Action(活动)

Action表示想要启动的Activity要完成什么动作,通常将Action、Category属性结合使用。使用动作启动Activity需要两个步骤:

1、在目标Activity清单文件中,添加意图过滤器<intent-filter>

<action>不单独使用,要和Category结合使用。动作可以自定义,类别不能自定义。

  1.       <intent-filter>
  2. <action android:name="haha" />
  3.  
  4. <category android:name="android.intent.category.DEFAULT" />
  5. </intent-filter> 

2、创建意图对象,调用setAction、addCategroy方法

  1.     //1创建意图
  2. Intent intent=new Intent();
  3. //2设置动作
  4. intent.setAction("haha");
  5. //3添加类别
  6. intent.addCategory(Intent.CATEGORY_DEFAULT);
  7. //intent.addCategory("android.intent.category.DEFAULT");
  8. //4启动
  9. 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. //1创建意图
  2. Intent intent=new Intent();
  3. //2设置动作
  4. intent.setAction("hehe");
  5. //3添加类别
  6. intent.addCategory(Intent.CATEGORY_DEFAULT);
  7. //4设置数据
  8. intent.setData(Uri.parse("gdp://www.baidu.com"));
  9. //intent.setData(Uri.parse("gdp:www.baidu.com"));
  10. //4启动
  11. startActivity(intent);
  1.  //AndroidManifest.xml中需要配置action、data、category
          <intent-filter>
  2. <action android:name="hehe" />
  3.  
  4. <category android:name="android.intent.category.DEFAULT" />
  5.  
  6. <data android:scheme="gdp" />
  7. </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.     //1创建意图
  2. Intent intent=new Intent();
  3. //2设置动作
  4. intent.setAction("gaga");
  5. //3添加类别
  6. //4设置数据类型
  7. intent.setDataAndType(Uri.parse("mdp://www.baidu.com"), "xxx/yyy");
  8. //5启动
  9. startActivity(intent);
  1. AndroidManifest.xml中需要配置:data type 的配置都在data中:
  1.      <intent-filter>
  2. <action android:name="gaga"/>
  3. <category android:name="android.intent.category.DEFAULT"/>
  4. <data android:scheme="mdp" android:mimeType="xxx/yyy"/>
  5. </intent-filter>

6、Extras(扩展)

发送短信给多人,包含内容:

  1. Intent intent = new Intent();
  2.  
  3. intent.setAction(Intent.ACTION_VIEW);
  4.  
  5. intent.setData(Uri.parse("smsto:10086,110"));
  6.  
  7. intent.putExtra("sms_body", "你好,好久不见");
  8.  
  9. startActivity(intent);

发送邮件:

  1. // 发送邮件action
  2. Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
  3.  
  4. // 文本格式
  5. emailIntent.setType("text/plain");
  6.  
  7. // 对方邮件地址
  8. emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
  9. "2654828081@qq.com");
  10.  
  11. // 标题内容
  12. emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "标题内容");
  13.  
  14. // 邮件文本内容
  15. emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "邮件内容");
  16.  
  17. // 弹出能够匹配要求的所有邮箱APP,点击选择
  18. startActivity(Intent.createChooser(emailIntent, "Choose Email Client"));

7、Flags(标志)

发送邮件
  1. // 发送邮件action
  2. Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
  3.  
  4. // 文本格式
  5. emailIntent.setType("text/plain");
  6.  
  7. // 对方邮件地址
  8. emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
  9. "****@qq.com");
  10.  
  11. // 标题内容
  12. emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "标题内容");
  13.  
  14. // 邮件文本内容
  15. emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "邮件内容");
  16.  
  17. // 弹出能够匹配要求的所有邮箱APP,点击选择
  18. 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的更多相关文章

  1. android开发之路10(文件的读写)

    1.安卓中文件的数据存储实例(将文件保存到手机自带存储空间中): ①MainActivity.java public class MainActivity extends Activity imple ...

  2. android开发之路05

    一.获取res资源文件下values中内容的方式: 1.string.xml文件-------------------------------> 取值方式:getResource().getSt ...

  3. android开发之路02(浅谈BroadcastReceiver)

    一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...

  4. android开发之路12(android四大组件&Fragment&AsyncTask类)

    一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...

  5. 菜单(Menu)的三中创建方式——Android开发之路2

    菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...

  6. android开发之路11(用SharedPreferences存储数据)

    Android平台给我们提供了一个SharedPreferences类,实际上SharedPreferences处理的就是一个key-value(键值对),它是 一个轻量级的存储类,特别适合用于保存软 ...

  7. android开发之路09(浅谈SQLite数据库01)

    1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...

  8. android开发之路04(初级android工程师必会,你懂得!)

    Android初级Android工程师重点掌握内容如下: 1.Android开发基础: ①UI界面设计: ②SQLite数据库: ③android四大组件: ④android网络编程: ⑤androi ...

  9. android开发之路03

    一.Activity1.如何在一个应用程序中定义多个Activity:①定义一个类,继承Activity:②在该类当中,复写Activity当中的onCreate方法:③在AndroidManifes ...

随机推荐

  1. lintcode Permutation Index

    题目:http://www.lintcode.com/zh-cn/problem/permutation-index/ 排列序号 给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的 ...

  2. 创建 flat network - 每天5分钟玩转 OpenStack(87)

    上一节我们讨论了 flat network 的原理,今天就来创建 "flat_net" 并分析底层网络的实现. 打开菜单 Admin -> Networks,点击 “Crea ...

  3. 效率和协作工具--OneNote

    身边有很多的朋友,都是在电脑上办公.除了会计和外贸相关的工作,用到Excel,公司的ERP比较多.日常工作中,特别是事情一多,大家基本不知道从何处完成今天的任务,而已有时经常丢三落四.同事在QQ或者M ...

  4. Lua 学习笔记(十)数据结构

    在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础.其他语言提供的数据结构,如数组.记录.线性表.队列.集合等,在Lua中都可以通过table来表示.而且使用Lua实现这些数据 ...

  5. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布

    来自官方日志的喜悦 被誉为全新开始的消息分析器时代,由MMA为您开启,博客原文写的很激动,大家可以点击这里浏览:http://blogs.technet.com/b/messageanalyzer/a ...

  6. 把《c++ primer》读薄(3-1 标准库string类型初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声 ...

  7. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(二)

    一:页面静态化 几个概念: 静态网址:(比如:http://localhost/abc.html) 特点:1.利用seo(search engine optimization) 搜索引擎优化;2:访问 ...

  8. Date, TimeZone, MongoDB, java中date的时区问题

    打印new Date(),Fri Aug 12 13:37:51 CST 2016. 显示Asia/Shanghai的时区,但是date toString 的时区简写却是CST.更坑爹的是,Googl ...

  9. SQL Server基础之《视图的概述和基本操作》

     数据库中的视图是一个虚拟表.同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生.本篇将通过一些实例来介绍视图的概念,视图的作用, ...

  10. Microsoft Visual Studio 插件

    AnkhSVN BatchFormat CodeMaind Nuget Package Manager