Intent 使用详解
极力推荐文章:欢迎收藏
Android 干货分享
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
Intent
是一个消息传递对象,主要用于组建之间的通讯,例如:启动Activity
、启动Service
、传递Broadcast
等
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
- Intent 主要用途、流程图
- Intent 分类
- 隐式 Intent 接收过滤类型
- PendingIntent 使用方法
- Intent 7 大常用属性
- 使用ADB调试 Intent
- Intent 常用方法使用总结
Intent 流程图
1. Intent 主要用途
1. 启动Activity
startActivity()
无返回值,直接启动Activity
startActivityForResult()
有返回值,返回值在onActivityResult() 回调
2. 启动Service
startService()
一次性操作bindService()
绑定组件,随组件生命周期结束而结束
3. 传递 Broadcast
sendBroadcast()
普通无序广播sendOrderedBroadcast()
有序广播sendStickyBroadcast()
持续黏性广播
2. Intent 分类
1.显示 Intent
按名称(完全限定类名)指定要启动的组件。
例如:
Intent intentActivity = new Intent(MainActivity.this,
ActivityMethods.class);
startActivity(intentActivity);
2.隐式 Intent
不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它
例如:
/**
* 发送短信
* **/
public static void SendMms(Context context, String mmsString) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, mmsString);
sendIntent.setType("text/plain");
// sendIntent.setData(Uri.parse("smsto:"));
// This ensures only SMS apps respond
// 修改 Intnent 选择器Tittle
String title = context.getResources().getString(R.string.hello_world);
Intent chooser = Intent.createChooser(sendIntent, title);
// 验证是否有Activity 接收
if (sendIntent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(chooser);
}
}
3. 隐式Intent 接收过滤类型
应用可以接收哪些隐式 Intent
,请在清单文件中使用 <intent-filter>
元素为每个应用组件声明一个或多个 Intent
过滤器。每个 Intent
过滤器均根据 Intent
的操作、数据和类别指定自身接受的Intent
类型。 仅当隐式 Intent
可以通过 Intent
过滤器之一传递时,系统才会将该 Intent
传递给应用组件。
在 name
属性中,声明接受的 Intent
操作。该值必须是操作的文本字符串值,而不是类常量。
例如:
java
代码中启动的Intent
的Action
Intent sendIntent = new Intent("String_action");
Androidmanfest.xml 中过滤标签如下:
使用一个或多个指定数据 URI
各个方面(scheme、host、port、path
等)和 MIME
类型的属性,声明接受的数据类型。
在 name
属性中,声明接受的 Intent
类别。该值必须是操作的文本字符串值,而不是类常量。
例如:
禁止其他应用通过Intent 掉起自己组件
android:exported="false"
应用主要入口点Action
<action android:name="android.intent.action.MAIN" />
Launcher 图标入口Action
以下两个元素必须配对使用,Activity
才会显示在应用启动器中。
注意:
CATEGORY_LAUNCHER
类别指示此 Activity
的图标应放入系统的应用启动器。 如果<activity>
元素未使用 icon
指定图标,则系统将使用<application>
元素中的图标
4. PendingIntent 使用方法
PendingIntent
对象是Intent
对象的包装器。PendingIntent
的主要目的是授权外部应用使用包含的 Intent
,就像是它从您应用本身的进程中执行的一样。
主要应用于以下场景
通知
NotificationManager
应用小部件
AppWidget
定时任务
AlarmManager
PendingIntent 使用注意事项:
- 1.PendingIntent.getActivity()
适用于启动 Activity
的 Intent
。
- 2.PendingIntent.getService()
适用于启动Service
的 Intent
。
- 3.PendingIntent.getBroadcast()
适用于启动 BroadcastReceiver
的 Intent
。
5. Intent 7 大属性
- 1 . Component Name(目标组件的全类、组件名称)
setComponent(),
getComponent(),
setClass() ,
setClassName()
- 2 . Action (intent 将执行的动作)
setAction()
getAction()
- 3 . Data (用于向Action 属性提供操作数据)
URI
对象scheme://host:port/path
(协议头,主机,端口,路径)
- 4 . Type 分类
指定Data
所指定的Uri
对应的MIME
类型,不指定会根据数据自动推导
- 5 . Category 类别
为Action
提供额外的附件类别信息,可以有多个Category
,但必须有一个default
。
<!-- 默认分类必须加上,否则会报错 -->
<category android:name="android.intent.category.DEFAULT"/>
- 6 . Extra 数据载体
通过键值对进行数据存储,用于多个Action
之间提供数据交换.
- 7 . Flags 标记
标记组件如何启动,以及启动后如何对待 FALG_ACTIVITY_SINGLE_TOP
FALG_ACTIVITY_CLEAR_TOP
等等)
6. 使用ADB调试 Intent
- 语法
adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
-e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
- eg :
adb shell am start -a android.intent.action.DIAL \
-d tel:555-5555 -n org.example.MyApp/.MyActivity
7.Intent 常用方法使用总结
由于总结内容较多,已经另开文章讲述。
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
Intent 使用详解的更多相关文章
- Android零基础入门第80节:Intent 属性详解(下)
上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属 ...
- Intent知识详解
Intent知识详解 一.什么是Intent 贴一个官方解释: An intent is an abstract description of an operation to be performed ...
- Android中Intent组件详解
Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...
- Android总结篇——Intent机制详解及示例总结
最近在进行android开发过程中,在将 Intent传递给调用的组件并完成组件的调用时遇到点困难,并且之前对Intent的学习也是一知半解,最近特意为此拿出一些时间,对Intent部分进行 ...
- Intent属性详解三 data、type和extra
1 Data 执行时要操作的数据 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”.“ht ...
- Intent属性详解二 Action、Category
先看效果图: 1.Action:该activity可以执行的动作 该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-fi ...
- Intent属性详解一 component属性
先看效果图 概述 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官 ...
- [转]android Intent机制详解
转自:http://blog.csdn.net/t12x3456/article/details/7688154 1.什么是Intent Intent是一种运行时绑定(run-time binding ...
- Intent Android 详解
Intents and Intent Filters 三种应用程序基本组件 activity, service和broadcast receiver——是使用称为intent的消息来激活的. Inte ...
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
本文大部分参考自 http://blog.csdn.net/mayingcai1987/article/details/6200909 ,对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点 ...
随机推荐
- 7天入门Linux
经过一个星期学习,Linux终于入门了,在这里小记下~ =====================分割线============================= Ubuntu常用命令: ctrl+s ...
- 数据库root密码删除
1 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 2 打开cmd命令提示符,进入上一步mysql.exe所在的文件夹. 3 输入命令 mysqld --skip-g ...
- scikit-learn算法选择路径图
 原文链接:https://blog.csdn.net/guang_mang/article/details/73658496
- 【Aizu - 0033】Ball (简单搜索)
-->Ball 原文是日语,这里直接写中文了 Descriptions: 如图所示,容器中间有一枢轴,下方分为两路.容器上方开口,从1到10连续编号的小球从容器开口A放入.通过调整枢轴E的方向, ...
- Oracle数据库---游标
--查询所有员工的员工号.姓名和职位的信息.DECLARE --定义游标 CURSOR emp_cursor IS SELECT empno,ename,job FROM emp; v_empno e ...
- k8s学习 - 概念 - master/node
k8s学习 - 概念 - master/node 在k8s中,有各种各样的概念和术语.这些概念是必须要学习和掌握的.我们先罗列下所有概念,然后再一个个看具体实例. 大概说一下这些概念: Master: ...
- EasyDL的哪种算法更适合你的图像分类应用
相信不少开发者已经或多或少对百度EasyDL有所耳闻或有所尝试,作为零算法基础实现图像分类和物体检测的”神器”,支持使用少量训练数据,使用通用算法训练,就能很快得到一个图像分类模型.最近百度EasyD ...
- HelloDjango 启动!免费带你学Django全栈!
欢迎 追梦 入伙 HelloGitHub-Team,同时为我们带来了完全免费的 HelloDjango 系列教程,全网首发于 HelloGitHub 公众号.让想你的系列文章被跟多人看到,那就来加入我 ...
- 【Java高级】(一)JVM
5.2.1.在Java中如何判断对象已死? 引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能被使用的 ...
- JAVA项目从运维部署到项目开发(六. Jenkins之静态页面)
用Git托管静态页面代码,通过Jenkins部署静态页面,是再方便不过的了.本文将介绍如何通过Jenkins部署最新的静态页面代码. 一.Jenkins的配置 1.设置项目名称.参数(环境.分支)等 ...