Intent见解

2023-10-27

在这里插入图片描述
今天做了一个很有意思的实验。
三个程序的关系如图
这里写图片描述

1,先上3个代码
ActionAttr .java文件

package org.crazyit.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * Description:
 * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a>
 * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class ActionAttr extends Activity
{
	public final static String CRAZYIT_ACTION =
		"org.crazyit.intent.action.CRAZYIT_ACTION";

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button) findViewById(R.id.bn);
		// 为bn按钮绑定事件监听器
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View arg0)
			{
				// 创建Intent对象
				Intent intent = new Intent();
				// 为Intent设置Action属性(属性值就是一个普通字符串)
				intent.setAction(ActionAttr.CRAZYIT_ACTION);
				startActivity(intent);
			}
		});
	}
}

SecondActivity.java文件

/**
 *
 */
package org.crazyit.intent;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class SecondActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);
		EditText show = (EditText) findViewById(R.id.show);
		// 获取该Activity对应的Intent的Action属性
		String action = getIntent().getAction();
		// 显示Action属性
		show.setText("SecondActivity----Action为:" + action);
		
		Toast.makeText(this, "SecondActivity----Action为:" + action, Toast.LENGTH_SHORT).show();
	}
}

ThirdActivity.java文件

/**
 *
 */
package org.crazyit.intent;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class ThirdActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);
		EditText show = (EditText) findViewById(R.id.show);
		// 获取该Activity对应的Intent的Action属性
		String action = getIntent().getAction();
		// 显示Action属性
		show.setText("ThirdActivity ----Action为:" + action);
		
		Toast.makeText(this, "ThirdActivity----Action为:" + action, Toast.LENGTH_SHORT).show();
		
	}
}

布局文件
main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:gravity="center_horizontal"
	>
<Button
	android:id="@+id/bn"  
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="启动指定Action、默认Category对应的Activity"
	/>
</LinearLayout>

second.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:gravity="center_horizontal"
	>
<EditText
	android:id="@+id/show"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content" 
	android:text="第二个Activity"
	android:editable="false"
	android:cursorVisible="false"
	/>
</LinearLayout>

这里是配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="org.crazyit.intent"
	android:versionCode="1"
	android:versionName="1.0">
	<uses-sdk
		android:minSdkVersion="10"
		android:targetSdkVersion="17" />
	<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
		<activity android:name=".ActionAttr"
				android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
		
		
		
		
		
		<activity android:name=".SecondActivity"
				android:label="@string/app_name">
			<intent-filter>
				<!-- 指定该Activity能响应Action为指定字符串的Intent -->
				<action android:name="org.crazyit.intent.action.CRAZYIT_ACTION" />
				
				
			</intent-filter>
		</activity>
		
		
		
		
	</application>
</manifest> 

第一种情况:
如上的配置文件,直接运行,界面如下
这里写图片描述
点击第一个按钮后,直接退出程序了。
现在添加一行代码
这里写图片描述

再次运行
这里写图片描述

出现结果了。

实验2:把第三个activity加入
这里写图片描述

运行结果,两个按钮都是一样的结果。
这里写图片描述
有点疑惑吗?两个都指定了这个

<action android:name="org.crazyit.intent.action.CRAZYIT_ACTION" />
```为何只匹配了一个呢?不应该两个都显示吗?
我们来看看这句话的作用;
(1)intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。
	理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,Android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。
	如果自己定义的某个Activity要通过隐式启动,在AndroidManifast.xm那么必须加上android.intent.category.DEFAULT,否则不起作用

实验3:配置文件改成这样
![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTYwNTEwMjMyNDAzMzE3?x-oss-process=image/format,png)

则变成了这个样子,可以选择启动ThirdActivity还是SecondActivity,两个都能正常启动

说明隐式启动,必须指定,否者activity不在应用列表中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Intent见解 的相关文章

  • Google Map Android API v2 无法在 Play 商店应用程序中显示地图

    我正在与Google Map Android API v2在 Android 应用程序中 它可以很好地与未签名的应用程序在不同的设备上 但是 当我签署 apk 并将应用程序上传到 Play 商店时 下载的应用程序显示白屏而不是地图 您使用什
  • Android 从图库中选择图像显示内存错误

    我正在编写一个代码示例 我必须从图库中选择一个图像 该代码正在运行 但是在从图库中选择图像后 我得到了内存不足错误 in my 活动结果时 我可以获得小图像 但大图像会产生问题 这是我的代码 try Uri selectedImageUri
  • 411 需要内容长度

    我正在尝试使用 Android Apache HttpClient 执行 POST 但它返回错误 411 Content Length required 这是代码 HttpClient httpClient new DefaultHttpC
  • Android:如何根据视图模型实时数据属性为片段编写单元测试?

    我的片段 UI 中有一个列表视图 其元素集取决于来自视图模型 LiveData 属性的值的状态 我想为片段创建工具测试 该片段包含与该属性的值集相关的 3 个场景测试用例 但我不知道从哪里开始 我的代码应该如下所示 class MyView
  • Android中的OpenGL用于视频显示

    是否可以使用 OpenGL 来显示视频并能够在运行时调整视图大小 是的 它的工作原理是通过 glTexSubImage2D 将每个帧作为纹理上传 我已经测试了基于 FFmpeg 的解码器的输出 效果很好
  • 删除所有(子)片段的正确方法

    我在父级片段线性布局 fragmentContainer 中动态加载一堆子级片段 然后当用户单击按钮时 我需要将它们全部删除并添加新的 我不知道每次会添加多少碎片 这是我一次性删除所有碎片的方法 LinearLayout ll Linear
  • Android 3.1 USB 主机 - BroadcastReceiver 未收到 USB_DEVICE_ATTACHED

    我经历过USB 主机的描述和示例位于developer android com http developer android com guide topics usb host html检测连接和分离的 USB 设备 如果我在清单文件中使用
  • 使用动画来滑动视图

    我有一个可以识别滑动手势 向上和向下 的 FrameLayout 例如 如果执行向上滑动 我应该对当前视图 即 MATCH PARENT x MATCH PARENT 进行动画处理 使其向上移动 同时新视图来自底部 我可以用动画来实现这一点
  • Room - LiveData 观察器在数据库更新时不会触发

    我试图在下面的代码中找出 为什么在我用新数据填充数据库后 Room 的 LiveData observable 不会给我新的转变 这是放在我的活动的 onCreate 方法中 shiftsViewModel ViewModelProvide
  • 为什么大多数 Android 设备不像典型操作系统那样有交换区域?

    现在有 Android 支持交换区域来提高性能吗 出于哪些考虑 大多数 Android 设备放弃了该功能 现在有 Android 支持交换区域吗 Quoting 黛安 哈克伯恩 https groups google com d msg a
  • 如何在Android上获取角度中的按键事件?

    我们如何在 Android 上的 Angular 中获取按键事件及其值 我使用phonegap Cordova Angular JS
  • 带有可点击区域的 Android 图像

    我需要建议如何在 Android 下实现以下功能 我需要一个表示类似于图形 来自离散数学 的图像 具有顶点和边缘 我可以在其中单击每个顶点或边缘并触发不同的操作 请告诉我如何实现这一目标 也许与imagebuttons 或另一种表示此功能的
  • BaseAdapter:将 hasStableIds() 设置为 false?

    我有一个ListView使用的子类BaseAdapter 适配器使用项目索引 位置 作为 id 因此 id 不稳定 底层数据的操作之一是在两个数据项之间交换 我需要在我的适配器中覆盖吗hasStableIds to return false
  • 如何在Android JUnit测试用例中调用Button.performClick?

    我是 Android 测试方面的新手 我想测试单击按钮是否会打开相应的活动 我做了一些研究 发现我需要使用 ActivityManager 来进行检查 问题是 我无法让 点击 部分正常工作 我正在尝试使用Button performClic
  • Android Studio 1.0 在 dexDebug 或 dexRelease 上构建失败

    我最近从 Android Studio 0 9 2 升级到 1 0 包括 Gradle 插件版本 1 0 0 并且在构建项目时遇到问题 每当我构建时 我都会在 dexDebug 或 dexRelease 步骤中收到以下异常 UNEXPECT
  • Android:如何停止监听电话监听器? [复制]

    这个问题在这里已经有答案了 可能的重复 Android 为什么 PhoneCallListener 在活动完成后仍然存在 https stackoverflow com questions 11666853 android why phon
  • 什么是“多重”启动模式?

    On http developer android com guide topics manifest activity element html http developer android com guide topics manife
  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • Android JobScheduler 每天只运行一次

    我检查了 JobScheduler API 它可以从 Android API 级别 21 开始使用 我想安排一个需要互联网并且每天仅运行一次或可选每周运行一次的任务 如果成功执行 我没有找到关于这种情况的例子 有人能帮我吗 谢谢 针对您的问
  • 膨胀类 android.support.design.internal.BottomNavigationView 时出错

    我正在制作我的第一个应用程序 这是一个简单的应用程序 带有启动屏幕和主要活动 现在我有两个构建变体 免费版本 活动底部有 Admob 横幅 付费版本 该应用程序不会在底部显示 admob 横幅 而是将其替换为用于切换活动的底部导航视图 我将

随机推荐

  • 递推方程求解方法

    总结一下递推方程的求解方法 主要介绍六种方法 迭代法 差消法 递归树 主定理 特征根法 母函数法 欢迎大家批评指正 1 迭代法 不断用递推方程的右部替换左部 下面以汉诺塔为例进行求解 有时候直接迭代可能不太方便 可以使用换元迭代 下面以二分
  • Nginx 安全配置

    Nginx 是一个高性能的 HTTP 和反向代理服务 使用非常广泛 目前很大一部分网站均使用了 Nginx 作为 WEB 服务器 Nginx 虽然非常强大 但是安全防护的配置及恶意访问默认是没用做基础配置的 一 nginx 版本信息隐藏 s
  • STM32学习记录——使用蓝牙点亮LED

    文章目录 前言 一 学习目的 二 模块介绍 三 代码记录 四 实际操作 前言 今天记录一个蓝牙模块的简单应用 有关蓝牙的AT指令模式的设置在前面的记录中已经详细记录过 如果忘记了可以看看下面的文章 HC 05蓝牙模块的使用 KAIs32的博
  • 所有的raft算法

    https raft github io
  • 【java.lang.ref】PhantomReference & jdk.internal.ref.Cleaner

    目录 零 前情概要 ref包内容 系列目录 上一章回顾 一 PhantomReference 适用场景 优雅和提前规避 Java中使用native memory 常规做法 借助于Java引用机制 处理流程 二 jdk internal re
  • KETTLE 异常处理

    kettle未能正常执行任务时 同样需要记录下来执行操作 以便分析任务异常 红色线条代表任务异常时执行的任务 绿色为正常执行的任务序列 任务执行时都有日志记录 但kettle日志表中字段存在执行时间 但不存在业务日期字段 比如今天的任务执行
  • 第11节-PhotoShop基础课程-索套工具

    文章目录 前言 1 索套工具 选中后按Ctrl 可以移动 2 加 减 交叉 shift alt 2 多边形索套工具 手动首尾相连 或者双击空地 1 单击绘制直线选区 2 双击结束绘制 3 加 减 交叉 4 delete可以删除节点 3 磁性
  • MySQL数据管理

    一 外键的创建 方法1 在创建表的时候 增加约束 这个方法比较复杂麻烦 CREATE TABLE grade gradeid INT 10 NOT NULL AUTO INCREMENT COMMENT 年级id gradename VAR
  • 《计算机网络》谢希仁第七版课后答案完整版

    文章目录 第一章 概述 1 01 计算机网络向用户可以提供那些服务 1 02 简述分组交换的要点 1 03 试从多个方面比较电路交换 报文交换和分组交换的主要优缺点 1 04 为什么说因特网是自印刷术以来人类通信方面最大的变革 1 05 因
  • c语言——找零问题

    某人购买物品一共花了x元 x lt 100 用100元现金去支付 售货员需要找零 请设计程序给出一个找零方案 并使找零的张数最少 设现有人民币面值包括 100元 50元 20元 10元 5元 1元 5角和1角 当x包含1角以下的金额时 按照
  • Arduino基本知识

    1 程序结构 2 变量 局部变量和全局变量 3 调用Arduino的函数 4 通过点亮led IO设置为输出模式 学习pinMode 和digitalWrite 5 按键开关 IO设置为输入模式 6 初识赋值运算符和逻辑运算符 和布尔类型
  • uni-popup使用uni-grid显示错误问题

    在uni popup中 使用了uni grid 内部item显示错误 重叠 解决方式 为item设置style 比如我设置的列数是4 那么style中的width设置为25 item中的文字也需要设置宽度 否则文字方向不对 原因 暂时未知
  • c语言 教学目标,c语言选择结构程序设计教学目标

    c语言选择结构程序设计教学目标 选择结构程序设计 教学目标 能力要求 a 能够使用 if 语句编写条件选择程序 b 能够使用嵌套 if 语句和 switch 语句编写多分支选择结构程序 基础能力落实 1 判断一个数的正 负 输出相应信息 2
  • C++11 -- 类的新功能

    文章目录 类的新功能 默认成员函数 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认函数的关键字delete 继承和多态中的final和override关键字 类的新功能 默认成员函数 原来在C 类中 有6个默认成员函
  • 爬虫IP列表

    百度爬虫IP列表220 181 51 180 149 130 123 125 71 180 76 5 66google爬虫列表67 221 235 66 249 68 66 249 67 203 208 60 66 249 72 66 24
  • 目标检测中计算图像的交并比(IOU)

    交并比为目标检测中一个重要的概念 来进行预测框 ground truth 与标注框的重合率来对检测的正确率进行比较 图示如下 交并比计算公式 I O U C
  • 被攻击了使用高防服务器有用吗?业务放在高防服务器里面还会不会被攻击?

    高防服务器和无防服务器最大的区别就是在于防火墙 而且怎么样的防火墙可以防止攻击呢 防火墙是网络基础设施中用于网络安全的设备 是用于网络安全的第一道防线 高防防火墙是硬件组成 防火墙的作用是检查通过防火墙的数据包并根据预设的安全策略决定数据包
  • 云计算与大数据作业

    第一章 云计算 云计算的定义 维基百科 云计算是一种动态扩展的计算模式 通过计算机网络将虚拟化的资源作为服务提供给用户 什么是云计算 像水 电 煤 资源性产品 一样利用你的IT资源 计算机存储网络资源 关键词 按需使用 超大规模 高弹性 定
  • Pycharm社区版安装Django并完成Python入门到实践Django实验

    安装流程 首先 随便打开一个项目 然后在pycharm界面的左下角有Terminal终端的图标 点开 在命令行里进入想要的目录 我进的是cd C Users yasuo Desktop py 建立虚拟环境 在这个目录下输入python m
  • Intent见解

    今天做了一个很有意思的实验 三个程序的关系如图 1 先上3个代码 ActionAttr java文件 package org crazyit intent import android app Activity import android