极力推荐文章:欢迎收藏

Android 干货分享

阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

Intent 是一个消息传递对象,主要用于组建之间的通讯,例如:启动Activity、启动Service、传递Broadcast

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

  1. Intent 主要用途、流程图
  2. Intent 分类
  3. 隐式 Intent 接收过滤类型
  4. PendingIntent 使用方法
  5. Intent 7 大常用属性
  6. 使用ADB调试 Intent
  7. 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 代码中启动的IntentAction

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()

适用于启动ServiceIntent

  • 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 常用方法使用总结

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

Intent 使用详解的更多相关文章

  1. Android零基础入门第80节:Intent 属性详解(下)

    上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属 ...

  2. Intent知识详解

    Intent知识详解 一.什么是Intent 贴一个官方解释: An intent is an abstract description of an operation to be performed ...

  3. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  4. Android总结篇——Intent机制详解及示例总结

         最近在进行android开发过程中,在将 Intent传递给调用的组件并完成组件的调用时遇到点困难,并且之前对Intent的学习也是一知半解,最近特意为此拿出一些时间,对Intent部分进行 ...

  5. Intent属性详解三 data、type和extra

    1 Data  执行时要操作的数据 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”.“ht ...

  6. Intent属性详解二 Action、Category

    先看效果图: 1.Action:该activity可以执行的动作 该标识用来说明这个activity可以执行哪些动作,所以当隐式intent传递过来action时,如果跟这里<intent-fi ...

  7. Intent属性详解一 component属性

    先看效果图 概述 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官 ...

  8. [转]android Intent机制详解

    转自:http://blog.csdn.net/t12x3456/article/details/7688154 1.什么是Intent Intent是一种运行时绑定(run-time binding ...

  9. Intent Android 详解

    Intents and Intent Filters 三种应用程序基本组件 activity, service和broadcast receiver——是使用称为intent的消息来激活的. Inte ...

  10. Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释

    本文大部分参考自 http://blog.csdn.net/mayingcai1987/article/details/6200909 ,对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点 ...

随机推荐

  1. HDU 5618:Jam's problem again(CDQ分治+树状数组处理三维偏序)

    http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意:…… 思路:和NEUOJ那题一样的.重新写了遍理解了一下,算作处理三维偏序的模板了. #includ ...

  2. 01(b)无约束优化(准备知识)

    1.解方程转化为优化问题 $n\left\{ \begin{aligned}& {{P}_{1}}(x)=0 \\ & {{P}_{2}}(x)=0 \\ & \text{   ...

  3. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  4. MyBatis 接口多参数的处理方法

    From<MyBatis从入门到精通> 1.接口类中增加的方法: /* 2.7 多个接口参数的用法 多个参数时,可以选取的方案有:使用Map类型或者使用@Param注解 使用Map类型作为 ...

  5. windbg 配置符号路径

    (转)WINDBG的符号下载与符号路径问题 安装与配置 windbg 的 symbol (符号) 本篇是新手自己写的一点心得.建议新手看看.同时希望前辈多多指教. 写这篇的动机:在网上找了一上午的 w ...

  6. CF1027D Mouse Hunt题解

    题目: 伯兰州立大学的医学部刚刚结束了招生活动.和以往一样,约80%的申请人都是女生并且她们中的大多数人将在未来4年(真希望如此)住在大学宿舍里. 宿舍楼里有nn个房间和一只老鼠!女孩们决定在一些房间 ...

  7. 针对Nginx日志中出现的漏洞扫描与爬虫的三种措施

    0x001 使用fail2ban工具结合防火墙(iptables | firewalld),将大量404请求的IP地址封了.(详见fail2ban使用说明:https://www.cnblogs.co ...

  8. Pytest进阶之参数化

    前言 unittest单元测试框架使用DDT进行数据驱动测试,那么身为功能更加强大且更加灵活的Pytest框架怎么可能没有数据驱动的概念呢?其实Pytest是使用@pytest.mark.parame ...

  9. Flutter学习笔记(11)--文本组件、图标及按钮组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 文本组件 文本组件(text)负责显示文本和定义显示样式,下表为text常见属性 Text组件属性及描述 属性名 类型 默认 ...

  10. PHP -- 数据库访问

    一.过时方法(PHP5以前的版本用的):用函数链接数据库,相当于面向过程的方式 //设置页面编码格式 header("content-type:text/html;charset=utf-8 ...