【android开发-03】android中Intent的用法介绍

1,Intent的作用

在Android开发中,Intent的使用非常广泛,包括启动Activity、启动Service、发送广播等。是各组件间交互的一种重要方式,他不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据。

Intent可以分为2种,显示Intent和隐式Intent。

2,Intent-filter用法说明

在Android中,intent-filter是一种用于过滤Intent的机制,它用于指定一个Activity、Service或BroadcastReceiver可以处理哪些类型的Intent。通过使用intent-filter,可以确保只有符合特定条件或具有特定数据的Intent才能到达目标组件。

intent-filter通常在AndroidManifest.xml文件中声明,用于指定目标组件的用途和可接受的数据类型。以下是一些常见的用法:

在Activity中过滤Intent:
在AndroidManifest.xml文件中,为每个Activity元素添加intent-filter子元素,以指定该Activity可以处理的Intent。例如:

<activity android:name=".MainActivity">  <intent-filter>  <action android:name="android.intent.action.VIEW" />  <category android:name="android.intent.category.DEFAULT" />  </intent-filter>  
</activity>

上述代码表示MainActivity可以处理一个具有默认Category的VIEW动作的Intent。

在Service中过滤Intent:
与Activity类似,Service也可以使用intent-filter来过滤Intent。例如:

<service android:name=".MyService">  <intent-filter>  <action android:name="com.example.MY_SERVICE" />  </intent-filter>  
</service>

上述代码表示MyService可以处理一个具有指定Action的Intent。

在BroadcastReceiver中过滤Intent:
BroadcastReceiver可以通过intent-filter来过滤广播Intent,以便在接收到特定广播时执行特定的操作。例如:

<receiver android:name=".MyBroadcastReceiver">  <intent-filter>  <action android:name="android.intent.action.BOOT_COMPLETED" />  </intent-filter>  
</receiver>  
```上述代码表示MyBroadcastReceiver可以处理一个BOOT_COMPLETED动作的广播Intent。 

总之,intent-filter是Android中用于过滤Intent的重要机制,它允许开发者指定目标组件可以处理的特定类型的Intent,以确保正确的数据能够传递给目标组件。

3,显示Intent用法和数据传递

以下是一个简单的例子,展示了如何使用Intent启动一个新的Activity。

假设我们有两个Activity:MainActivity和DetailActivity。在MainActivity中,用户可以点击一个按钮来查看DetailActivity,展示关于某个物品的详细信息。

在MainActivity中,我们可以创建一个Intent来启动DetailActivity。以下是一个示例代码:

public class MainActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  // 创建一个按钮,点击后启动DetailActivity  Button button = findViewById(R.id.button);  button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  // 创建一个Intent,指定要启动的Activity为DetailActivity  Intent intent = new Intent(MainActivity.this, DetailActivity.class);  // 可以在Intent中传递数据给DetailActivity  intent.putExtra("item_id", 123);  // 启动DetailActivity  startActivity(intent);  }  });  }  
}

在DetailActivity中,我们可以从Intent中获取传递的数据,并根据数据展示关于物品的详细信息。以下是一个示例代码:

public class DetailActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_detail);  // 从Intent中获取传递的数据  Intent intent = getIntent();  String itemId = intent.getStringExtra("item_id");  // 根据数据展示关于物品的详细信息  // ...  }  
}

Intent有多个重载函数,其中一个是Intent(Context packageContext,Class<?> cls),第一个参数要求提供一个启动活动的上下文,第二个参数class则是想要启动的目标活动。

使用这种方式来启动活动,Intent的意图非常明显,因此称为显示Intent。

Intent还向下一个活动传递数据,Intent提供了一系列的putExtra方法的重载,可以把我们想要的数据暂存在Intent中。putExtra方法接收2个参数,第一个参数是键,用于后面从Intent取值。第二个参数才是真正传递的数据。然后在下一个活动中通过getIntent方法获取到启动下一个活动的Intent,然后调用getStringExtra,传入相应的键值,就可以获取到数据。这里传递的是字符串,所以调用getStringExtra。如果是整形数据则使用getIntExtra,以此类推。

4,隐式Intent用法

隐式Intent是一种没有指定具体的目标组件的Intent,它需要借助ComponentName或Action、Category等信息来启动目标Activity。以下是使用隐式Intent的步骤:

4.1创建隐式Intent对象,并设置Action和Category等信息。例如:

Intent intent = new Intent(action);

其中,action 是一个字符串类型的动作名称,比如 “android.intent.action.VIEW”。如果需要添加 Category,则可以使用 Categories.add() 方法添加,例如:

intent.addCategory(category);

其中,category 是一个字符串类型的类别名称,比如 “android.intent.category.DEFAULT”。

4.2将隐式Intent传递给Context的startActivity()方法,以启动目标Activity。例如:

startActivity(intent);

4.3如果需要传递数据给目标Activity,则可以使用 putExtra() 方法将数据添加到Intent中。例如:

intent.putExtra(name, value);

其中,name 是一个字符串类型的键名,value 是对应的值。

4.4在目标Activity中,可以通过 getIntent() 方法获取隐式Intent,并从中获取传递的数据。例如:

Intent intent = getIntent();  
String name = intent.getStringExtra(name);

其中,name 是传递数据的键名。

使用隐式Intent,不仅可以启动本程序内的活动,还有启动其他程序的活动,使应用程序间共享成为可能。

5,Intent返回数据给上一个活动
在 Android 中,使用 Intent 在活动之间传递数据是非常常见的操作。如果你希望在一个活动中获取另一个活动返回的数据,可以使用 startActivityForResult() 方法来启动目标活动,并在目标活动结束时返回数据给上一个活动。

下面是一个简单的示例,演示了如何在目标活动中获取数据并返回给上一个活动:

1,在上一个活动(例如 MainActivity)中启动目标活动(例如 TargetActivity):

public class MainActivity extends AppCompatActivity {  public static final int REQUEST_CODE = 123;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  Button button = findViewById(R.id.button);  button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  Intent intent = new Intent(MainActivity.this, TargetActivity.class);  startActivityForResult(intent, REQUEST_CODE);  }  });  }  
}

2,在目标活动(例如 TargetActivity)中处理数据并返回给上一个活动:

public class TargetActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_target);  // 处理数据...  String data = "Hello from Target Activity!";  Intent intent = new Intent();  intent.putExtra("data", data); // 将数据添加到 Intent 中  setResult(RESULT_OK, intent); // 设置结果码和 Intent  finish(); // 结束当前活动  }  
}

3,在上一个活动中重写 onActivityResult() 方法来接收目标活动返回的数据:

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  if (requestCode == REQUEST_CODE) { // 判断是否是目标活动的返回结果  if (resultCode == RESULT_OK) { // 判断是否成功返回结果  String returnedData = data.getStringExtra("data"); // 从 Intent 中获取返回的数据  // 处理返回的数据...  } else { // 处理其他结果码的情况,例如 RESULT_CANCELED 或其他自定义结果码  // 处理取消或错误的情况...  }  } else { // 处理其他请求码的情况,例如其他活动的返回结果  // 处理其他请求码的情况...  }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka中的常见问题处理

文章目录 1. 如何防⽌消息丢失2. 如何防⽌重复消费3. 如何做到消息的顺序消费4. 如何解决消息积压问题4.1 消息积压问题的出现4.2 消息积压的解决⽅案 5. 实现延时队列的效果5.1 应用场景5.2 具体方案 1. 如何防⽌消息丢失 ⽣产者&#xff1a;1&#xff09;使⽤同步发送 2&…

thinkphp 判断当前页 导航条高亮等方法

ACTION_NAME等表示全局变量,表示当前页面的操作方法 APP_NAME // 当前项目名称 MODULE_NAME //当前模块名称 ACTION_NAME // 当前操作名称 当然,也可以在控制器中,自己定义变量,比如 $this->assign(‘nav’, ‘cp’); 用法示例 <li <if condition" (ACTION_NA…

uniapp使用u-checkbox

当使用uni-app开发时&#xff0c;可以使用u-checkbox组件来实现复选框功能。以下是一个更详细的例子&#xff0c;展示如何在uni-app中使用u-checkbox组件&#xff0c;并介绍一些相关的API用法。 首先&#xff0c;确保已经安装并引入了u-checkbox组件。可以通过在页面的<tem…

NetApp EF 系列全闪存存储,为实时分析、HPC 和数据库等性能敏感型工作负载提供助力

NetApp EF 系列全闪存存储 如果您需要为实时分析、HPC 和数据库等性能敏感型工作负载提供强劲动力&#xff0c;NetApp EF 系列全闪存存储的性价比优势不言自明。其可为要求最苛刻的应用程序提供微秒级响应&#xff0c;最大限度地延长正常运行时间并提供 99.9999% 的可靠性。 为…

Maya 2024(3D建模、动画和渲染软件)

Maya 2024是一款非常强大的3D建模、动画和渲染软件&#xff0c;它提供了许多新功能和改进&#xff0c;以帮助建模师、动画师和渲染师更加高效地进行创作。 在建模方面&#xff0c;Maya 2024引入了Symmetry&#xff08;对称&#xff09;功能&#xff0c;可以在网格两侧生成均匀…

学习笔记三十六:通过Ingress-nginx实现灰度发布

通过Ingress-nginx实现灰度发布 灰度发布原理将新版本灰度给部分用户切一定比例的流量给新版本 部署两个版本的服务以 nginx 为例&#xff0c;先部署一个 v1 版本:部署一个 v2 版本再创建一个 Ingress&#xff0c;对外暴露服务&#xff0c;指向 v1 版本的服务:访问验证 基于 He…

智能井盖位移报警器效果一览,感知井盖异常

井盖位移是指井盖在受到外力作用下产生的位置移动。这种现象通常发生在道路颠簸、车流量较大或地下管道受压较大的区域&#xff0c;当然也不排除会出现在一些角落内。当井盖发生位移或倾斜时&#xff0c;不仅会影响城市内道路的通行&#xff0c;还会给行人和车辆带来安全隐患。…

1056 Mice and Rice

题意&#xff1a;给定一组选手&#xff0c;按一定顺序将这些选手进行分组竞赛&#xff0c;每组的最大值为优胜者&#xff0c;进入下一轮分组再进行竞赛&#xff0c;直到选出最大值。然后输出每个选手的rank。 坑点&#xff1a;每个选手的rank为该轮竞赛选出的优胜者数1&#x…

web:catcat-new(文件包含漏洞、flask_session伪造)

前提知识 /etc/passwd 该文件储存了该Linux系统中所有用户的一些基本信息&#xff0c;只有root权限才可以修改。其具体格式为 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell&#xff08;以冒号作为分隔符&#xff09; /proc/self proc是一个伪文件系统…

【前缀和]LeetCode1862:向下取整数对和

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 作者推荐 动态规划LeetCode2552&#xff1a;优化了6版的1324模式 题目 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 …

Java之Stream的实用语法

1. 转Map List<Book> books bookMapper.list(); Map<String, Book> bookMap books.stream().collect(Collectors.toMap(Book::getBookId, book -> book));结果结构 {"1": {"bookId": "1","bookTitle": "书1&q…

2-redis高级-centos上安装redis(编译安装、redis启动)、redis客户端操作、redis使用场景、redis中的通用命令

1 centos上安装redis 1.1 编译安装 1.2 redis启动 2 redis客户端操作 3 redis使用场景 4 通用命令 1 centos上安装redis # win 上装redis # 上线--》centos装了--》详细研究 # docker 装---》配置--》持久化# 官网看看-redis源码 -----》自己编译-redis stack----》编译过后的…

LangChain的函数,工具和代理(二):LangChain的表达式语言(LCEL)

LangChain Expression Language (LCEL) 是 LangChain 工具包的重要补充&#xff0c;旨在提高文本处理任务的效率和灵活性。LCEL 允许用户采用声明式方法来组合链&#xff0c;便于进行流处理、批处理和异步任务。其模块化架构还允许轻松定制和修改链组件。LCEL 的优势之一是它使…

知识图谱最简单的demo实现——基于pyvis

1、前言 我们在上篇文章中介绍了知识图谱的简单实现&#xff0c;最后使用neo4j进行了展示&#xff0c;对于有些情况我们可能并不想为了查看知识图的结果再去安装一个软件去实现&#xff0c;那么我们能不能直接将三元组画出来呢/ 接下来我们就介绍一个可视化的工具pyvis&#…

STM32/GD32_分散加载

Q&#xff1a;如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域&#xff1f; KEIL环境&#xff1a;.map后缀文件、.sct后缀文件 IAR环境&#xff1a;.map后缀文件、.icf后缀文件 【map文件】 对固件里面的变量、函数、常量等元素的存储空间进行分配的说明…

ffmpeg开发 环境配置

ffmpeg开发简图 1 下载ffmpeg开发包 https://ffmpeg.org/download.html 包含三个版本&#xff1a;Static、Shared以及Dev Static --- 包含3个应用程序&#xff1a;ffmpeg.exe , ffplay.exe , ffprobe.exe&#xff0c;体积都很大&#xff0c;相关的DLL已经被编译到exe里面去…

Hadoop运行模式及目录结构

文章目录 Hadoop运行模式本地模式伪分布式模式完全分布式模式 Hadoop目录结构配置文件说明默认配置文件&#xff1a;自定义配置文件&#xff1a; Hadoop运行模式 本地模式 这种模式在一台单机上运行&#xff0c;没有分布式文件系统&#xff0c;而是直接读写本地操作系统的文件…

VS2022使用Vim按键

VS2022使用Vim按键 在插件管理里面搜索VsVim 点击安装&#xff0c;重启VS 工具->选项->VsVim 配置按键由谁处理&#xff0c;建议Ctrl C之类常用的使用VS处理&#xff0c;其它使用Vim处理

2024北京眼健康展,北京近视眼镜展,中国眼视光产品展览会

创中国眼康贸易平台&#xff0c;CEYEE中国眼博会创造2024年眼康产业发展的新动力&#xff1b; ——随着科技的不断发展&#xff0c;人们对于眼睛健康问题的重视程度也越来越高。在这样的背景下&#xff0c;2024第6届中国(北京)国际青少年眼健康产业展览会(CEYEE中国眼博会)将于…

golang WaitGroup的使用与底层实现

使用的go版本为 go1.21.2 首先我们写一个简单的WaitGroup的使用代码 package mainimport ("fmt""sync" )func main() {var wg sync.WaitGroupwg.Add(1)go func() {defer wg.Done()fmt.Println("xiaochuan")}()wg.Wait() }WaitGroup的基本使用场…