前面学习Activity时己经屡次使用了 Intent,当一个Activity须要启动另外一个Activity时, 程序并无直接告诉系统要启动哪一个Activity,而是经过Intent来表达本身的意图:须要启动哪一个Activity。android
Intent不只是封装Android应用程序须要启动某个组件的“意图”,仍是应用程序组件之间通讯的重要媒介。本节开始来学习Intent的使用。浏览器
Intent最多见的用途是绑定应用程序组件,并在应用程序之间进行通讯。尽管 Intent 能够经过多种方式促进组件之间的通讯,但其基本用例主要包括如下三个:服务器
1.启动 Activity微信
Activity 表示应用中的一个屏幕。经过将 Intent 传递给 startActivity(),能够启动新的 Activity 实例。Intent 描述了要启动的 Activity,并携带了任何须要的数据。架构
若是但愿在 Activity 完成后收到结果,则能够调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,Activity 将结果做为单独的 Intent 对象接收。布局
2.启动服务学习
Service 是一个不使用用户界面而在后台执行操做的组件。经过将 Intent 传递给 startService(),能够启动服务执行一次性操做(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何须要的数据。优化
若是服务旨在使用客户端-服务器接口,则经过将 Intent 传递给 bindService(),能够从其余组件绑定到此服务。this
3.发送广播spa
广播是任何应用都可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各类广播。经过将 Intent 传递给 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast(),能够将广播传递给其余应用。
接下来经过一个表来列举Intent启动组件的经常使用的方法,具体以下表所示:
在上表中,列举了经过Intent来开启不一样组件的经常使用方法。须要注意的是,使用Intent开启Activity和开启Service只有两个方法,而开启BroadcastReceiver有多个方法。
Android中Intent寻找目标组件的方式分为两种,一种是显式Intent,另外一种是隐式Intent。接下来分别针对这两种Intent进行详细的讲解。
显式Intent,即在经过Intent启动Activity时,须要明确指定激活组件的名称。在程序中,若是须要在本应用中启动其余的Activity时,可使用显式意图来启动Activity,其本例代码具体以下:
// 建立Intent对象
Intentintent=newIntent(this, SecondActivity.class);
// 开启Activity
startActivity(intent);
在上述示例代码中,经过Intent的构造方法来建立Intent对象。构造方法接收两个参数,第一个参数Context要求提供一个启动Activity的上下文,第二个参数Class则是指定要启动的目标Activity,经过构造方法就能够构建出Intent对象。
除了经过指定类名开启组件外,显式Intent还能够根据目标组件的包名、全路径名来指定开启组件,代码以下所示:
Intentintent=newIntent();
intent.setClassName("com.jinyu.cqkxzsxy.android.intent", "com.jinyu.cqkxzsxy.android.intent.SecondActivity");
startActivity(intent);
在上述实例代码中,经过setClassName(包名,类全路径名)方法指定要开启组件的包名和全路径名来启动另外一个组件。
Activity类中提供了一个startActivity ( Intent intent )方法,该方法专门用于开启Activity,它接收一个Intent参数,这里将构建好的Intent传入该方法便可启动目标Activity。
使用这种方式开启的Activity,意图很是明显,所以称之为显式Intent,也叫作显式意图。
没有明确指定组件名的Intent称为隐式Intent,又叫隐式意图。Android系统会根据隐式Intent中设置的动做(action )、类别(category )、数据(Uri和数据类型)找到最合适的组件。具体代码以下所示:
<activityandroid:name=".SecondActivity">
<intent-filter>
<!-- 设置action属性,须要在代码中根据所设置的name打开指定的组件 -->
<actionandroid:name="com.jinyu.cqkxzsxy.android.intent.action.xxx"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在上述代运中,<action>标明了当前Activity能够响应的动做为“com.jinyu.cqkxzsxy.android.intent.action.xxx”,而<category>标签则包含了一些类别信息,只有当<action>和<category>中的内容同时匹配时,Activity才会被开启。
使用隐式Intent开启Activity的示例代码以下所示:
Intentintent=newIntent();
intent.setAction("com.jinyu.cqkxzsxy.android.intent.action.xxx");
startActivity(intent);
在上述代码中,Intent置顶了setAction(“com.jinyu.cqkxzsxy.android.intent.action.xxx”);这个动做并无指定category,这是由于清单文件中配置的“android.intent.category.DEFAULT”是一种默认的category,在调用startActivity()方法时,会自动将这个category添加到Intent中。
隐式 Intent启动Activity的示意图以下图所示。
在上图中,Activity A 建立包含操做描述的 Intent,并将其传递给 startActivity()。 Android 系统搜索全部应用中与 Intent 匹配的 Intent 过滤器。 找到匹配项以后,该系统经过调用匹配 Activity(Activity B)的 onCreate() 方法并将其传递给 Intent,以此启动匹配 Activity。
在上述两种Intent中,显式Intent开启组件时必需要指定组件的名称,通常只在本应用程序切换组件时使用。而隐式Intent的功能要比显示Intent更增强大,不只能够开启本应用的组件,还能够开启其余应用的组件,例如打开系统自带的照相机、浏览器等。
今天就先到这里,若是有问题欢迎留言一块儿探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!
若是该系列分享对你有帮助,就动动手指关注、点赞、留言吧,你的互动就是对我最大的鼓励!
此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻全部,若需转载请联系做者受权,特此声明!
往期总结回顾:
Android零基础入门第1节:Android的前世此生
Android零基础入门第2节:Android 系统架构和应用组件那些事
Android零基础入门第3节:带你一块儿来聊一聊Android开发环境
Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招
Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神
Android零基础入门第6节:配置优化SDK Manager, 正式约会女神
Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅
Android零基础入门第8节:HelloWorld,个人第一趟旅程出发点
Android零基础入门第9节:Android应用实战,不懂代码也能够开发
Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio
Android零基础入门第11节:简单几步带你飞,运行Android Studio工程
Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌
Android零基础入门第13节:Android Studio个性化配置,打造开发利器
Android零基础入门第14节:使用高速Genymotion,跨入火箭时代
Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航
Android零基础入门第16节:Android用户界面开发概述
Android零基础入门第17节:文本框TextView
Android零基础入门第18节:输入框EditText
Android零基础入门第19节:按钮Button
Android零基础入门第20节:复选框CheckBox和单选按钮RadioButton
Android零基础入门第21节:开关组件ToggleButton和Switch
Android零基础入门第22节:图像视图ImageView
Android零基础入门第23节:图像按钮ImageButton和缩放按钮ZoomButton
Android零基础入门第24节:自定义View简单使用,打造属于你的控件
Android零基础入门第25节:简单且最经常使用的LinearLayout线性布局
Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不一样
Android零基础入门第27节:正确使用padding和margin
Android零基础入门第28节:轻松掌握RelativeLayout相对布局
Android零基础入门第29节:善用TableLayout表格布局
Android零基础入门第30节:两分钟掌握FrameLayout帧布局
Android零基础入门第31节:少用的AbsoluteLayout绝对布局
Android零基础入门第32节:新推出的GridLayout网格布局
Android零基础入门第33节:Android事件处理概述
Android零基础入门第34节:Android中基于监听的事件处理
Android零基础入门第35节:Android中基于回调的事件处理
Android零基础入门第36节:Android系统事件的处理
Android零基础入门第37节:初识ListView
Android零基础入门第38节:初识Adapter
Android零基础入门第39节:ListActivity和自定义列表项
Android零基础入门第40节:自定义ArrayAdapter
Android零基础入门第41节:使用SimpleAdapter
Android零基础入门第42节:自定义BaseAdapter
Android零基础入门第43节:ListView优化和列表首尾使用
Android零基础入门第44节:ListView数据动态更新
Android零基础入门第45节:网格视图GridView
Android零基础入门第46节:列表选项框Spinner
Android零基础入门第47节:自动完成文本框AutoCompleteTextView
Android零基础入门第48节:可折叠列表ExpandableListView
Android零基础入门第49节:AdapterViewFlipper图片轮播
Android零基础入门第50节:StackView卡片堆叠
Android零基础入门第51节:进度条ProgressBar
Android零基础入门第52节:自定义ProgressBar炫酷进度条
Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar
Android零基础入门第54节:视图切换组件ViewSwitcher
Android零基础入门第55节:ImageSwitcher和TextSwitcher
Android零基础入门第56节:翻转视图ViewFlipper
Android零基础入门第57节:DatePicker和TimePicker选择器
Android零基础入门第58节:数值选择器NumberPicker
Android零基础入门第59节:经常使用三大Clock时钟组件
Android零基础入门第60节:日历视图CalendarView和定时器Chronometer
Android零基础入门第61节:滚动视图ScrollView
Android零基础入门第62节:搜索框组件SearchView
Android零基础入门第63节:值得借鉴学习的选项卡TabHost
Android零基础入门第64节:揭开RecyclerView庐山真面目
Android零基础入门第65节:RecyclerView分割线开发技巧
Android零基础入门第66节:RecyclerView点击事件处理
Android零基础入门第67节:RecyclerView数据动态更新
Android零基础入门第68节:RecyclerView添加首尾视图
Android零基础入门第69节:ViewPager快速实现引导页
Android零基础入门第70节:ViewPager打造TabHost效果
Android零基础入门第71节:CardView简单实现卡片式布局
Android零基础入门第72节:SwipeRefreshLayout下拉刷新
Android零基础入门第73节:Activity建立和配置
Android零基础入门第74节:Activity启动和关闭
Android零基础入门第75节:Activity状态和生命周期
Android零基础入门第76节:Activity数据保存和横竖屏切换
Android零基础入门第77节:Activity任务栈和启动模式