分享好友 最新资讯首页 最新资讯分类 切换频道
Android Intent的使用
2024-12-26 07:10

目录

Android Intent的使用

1.介绍

2.Intent启动服务

2.1启动 Activity

2.2启动服务

2.3传递广播

3.Intent类型

3.1显示

3.2隐示

4.数据的传递

4.1向下传递

4.2返回传递被启动的数据

5举例说明

5.1显示

5.2隐示

5.3向下传递数据

5.4向上传递数据

5.5小应用

5.5.1闹钟

5.5.2 日历

5.5.3 相机

5.5.4 联系人、人员应用

5.5.5 电子邮件

5.5.6 文件存储

5.5.7 本地操作

5.5.8 地图

5.5.9 音乐或视频

5.5.10 新笔记

5.5.11 电话

5.5.12 搜索

5.5.13 设置

5.5.14 发送短信

5.5.15 网络浏览


    Intent 是一个消息传递对象,可以用来从其他应用组件请求操作。其中主要有三种,1.启动Activity;2.启动服务;3.传递广播。Intent有显示和隐示之分。

    Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 用于描述要启动的 Activity,并携带任何必要的数据。

    如果您希望在 Activity 完成后收到结果,请调用 startActivityForResult()。在 Activity 的 onActivityResult() 回调中,您的 Activity 将结果作为单独的 Intent 对象接收。

    Service 是一个不使用用户界面而在后台执行操作的组件。使用 Android 5.0(API 级别 21)及更高版本,您可以启动包含 JobScheduler 的服务。

    对于 Android 5.0(API 级别 21)之前的版本,您可以使用 Service 类的方法来启动服务。通过将 Intent 传递给 startService(),您可以启动服务执行一次性操作(例如,下载文件)。Intent 用于描述要启动的服务,并携带任何必要的数据。

    如果服务旨在使用客户端-服务器接口,则通过将 Intent 传递给 bindService(),您可以从其他组件绑定到此服务。

    广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast() 或 sendOrderedBroadcast(),您可以将广播传递给其他应用。

也可以配合下面的图来进一步看,也会在后面用代码的形式来讲解各个部分,其中隐示intent常用的实例也会用代码的演示。

    通过提供目标应用的软件包名称或完全限定的组件类名来指定可处理 Intent 的应用。通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,您可能会启动您应用内的新 Activity 以响应用户操作,或者启动服务以在后台下载文件。

    不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理。例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。

    当启动activity的时候把数据传递下去、

   启动activity后,返回原activity的时候把数据传递回来。

 

如上如所示 点击显示启动,启动第二个activity,跳转到第二个activity界面。代码如下

5.1.1清单文件

 

5.1.2点击步骤

 

 

5.1.4 Main2Activity xml:

 

显示的开启activity就很明确了Intent  intent = new Intent(this, Main2Activity.class);“this”代指上下文。“Main2Activity.class” ,代指要跳转的activity,最后通过startActivity(intent);来完成启动。

由上图可以看出点击“隐示启动” 启动隐示activity,代码如下

5.2.1 清单文件

 

5.2.2 点击步骤

 

5.2.3 MainActivity xml

 

5.2.4 Main3Activity xml

 

可以看出与显示不同的是首先清单文件中多了:intent-filter 标签,里面包含 action 和 category 标签。然后Intent intent = new Intent("com.example.administrator.myintent.ACTION_START");里面直接是写的intent-filter 标签对应的activon标签的值。

action : 标签指明了当前活动可以相应com.example.administrator.myintent.ACTION_START action,当然这个action是我自己定义的.

category :标签包含了一个附件信息,更精确的指明了能够响应的intent中还可能带有category

只有 action和category标签对应的内容能够完全匹配的时候才能启动对应的activity也就是说正确写法是

 

但是以上并没有写intent.addCategory("android.intent.category.DEFAULT");也完成了启动,那因为android.intent.category.DEFAULT是一种默认的category在调用startActivity(intent);时会默认加上。action是只有一个,但是category是可以添加多个的

这时我们加上   category

 

结果程序崩溃了:   

 Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.administrator.myintent.ACTION_START cat=[com.example.administrator.myintent.DEFAULT] }
                                                                                   
报错了,找不到默认的DEFAULT。将清单文件修改一下

 

现在就可以顺利运行了。                                            

我们通过显示的方式传递数据,主要展示传递普通类型和对象

 

intent.putExtra("key", "你好Main4Activity,我是MainActivity"); 传递的是一个string类型的数据 "key"-> key"你好Main4Activity,我是MainActivity" ->value

intent.putExtra("key1",persion); 传递一个对象"key1" ->key  ,persion ->value  persion 需要序列化

 

接收

 

String stringExtra = getIntent().getStringExtra("key");接收的是string的数据,Persion persion = (Persion) getIntent().getSerializableExtra("key1");接收的是对象。

Main4Activity  xml:

 

 

以上三个图是通过跳转到下一个activity,然后通过点击一个自己定义的返回按钮返回,然后更新返回带回来的内容,具体如下

1.MainActivity

1.1启动Main5Activity.class

public static final int CODE = 10;

 

1.2重写onActivityResult(方法

 

1.3 MainActivity的xml 

 

 

2. Main5Activity.class

 

在setResult(RESULT_OK, intent);中有两个参数setResult(int resultCode, Intent data)

resultCode:用于向上一个活动返回处理结果 一般是 RESULT_OK、RESULT_CANCELED、RESULT_FIRST_USER等

data:需要传递回去的数据

2.1 Main5Activity 的 xml 文件

 

2.2  Main5Activity的清单文件

 
 

如果想点击返回,带回数据的话,我是通过重写onBackPressed)方法来做的,如下

 

其实只要是执行过

 

这些代码,点击返回就可以完成。

在onActivityResult(int requestCode, int resultCode, Intent data)中有三个参数

requestCode:启动活动时传入的请求码 也就是CODE ,自己定义值

resultCode:返回数据时的处理结果  RESULT_OK 是系统自己的值,也可以自己定义

data:返回的数据

5.5.1闹钟

如图所示首先添加了一个闹钟选项。具体代码如下

在MainActivity中的

 

在MainActivity xml

 

 

一定要注意权限

 

5.5.1.1设置闹钟

 

 

过滤器

 

完整代码

 
 

xml:

 

5.5.1.2创建定时器

 

 

过滤器

 

具体代码

 
 

xml

 

5.5.1.3显示闹钟列表

 

 

过滤器

 

具体代码

 
 

xml

 

 

5.5.2 日历

设置日历具体代码如下

 

过滤器

 

完成代码

 
 
 

MainActivity xml:

 

 

5.5.3 相机

点击相机跳转到如图中的功能

5.5.2.1 拍摄照片或者视频并将其返回

如上图所示,当点击“拍摄照片或视频并将其返回_隐示”的时候跳转到相机页面,点击拍照选择对号完成拍摄,并返回数据,具体代码入下

过滤器

 

完整代码

在Main7Activity 中的

 
 

在 Main7Activity 的xml中的

 

补充适配7.0绝对路径报错问题

 

file_paths

 

 

5.5.2.2 以静态图像模式启动相机应用

点击“以静态图像模式启动相机应用_隐示”按钮的时候,跳转到相机

过滤器

 

具体代码

在Main7Activity 中

 
 

对应的想xml:

 

5.5.2.3 以视屏方式启动相机应用

当点击“以视频模式启动相机应用_隐示”同样条转到相机

过滤器

 

具体代码

在Main7Activity中

 
 

对应的xml:

 

5.5.4 联系人、人员应用

点击左侧的“联系人、人员应用”跳转到右侧页面。

在MainActivity中跳转的代码

 

xml:

 

5.5.4.1选择联系人

点击“选择联系人”跳转到选择联系人页面如下

选择“移动”,跳转回去,查看页面

具体代码如下

 

完整代码

测试机用的7.0的所以做了一个权限处理,如果只是跳转不往回拿数据是不用权限的,如果要往回拿数据需要读取联系人信息

 

在Main8Activity中的

 

权限回调

 

跳转联系人

 

数据回调

 

对应的xml

 

5.5.4.2选择特定联系人返回电话

模拟输入姓名返回电话号码

:Main8Activity中的

 
 

对应的xml

 

5.5.4.3查看联系人

点击“查看联系人” 跳转到具体联系人页面

:Main8Activity中的

 
 

对应的xml:

 

5.5.4.4编辑现有联系人

点击“编辑现有联系人”,跳转到特定的联系人页面并修改,URI的数据是之前获取的直接输入的。

:Main8Activity中的

 
 

对应的xml:

 

5.5.4.5插入联系人

点击“插入联系人”跳转到新建联系人中,具体代码如下

:Main8Activity中的

 
 

对应的xml:

 

5.5.5 电子邮件

点击左侧图上的“电子邮件”,跳转到发送邮件界面,前提是已经登录了。

 

过滤器

 

具体代码

在MainActivity中

 
 

对应的xml:

 

 

5.5.6 文件存储

    点击左侧的“文件存储”跳转到右侧列表。

5.5.6.1 检索特定类型的文件 

点击“检索特定类型的文件”跳转到相册文件,选择图片返回。

具体代码

 

过滤器

 <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The OPENABLE category declares that the returned file is accessible
             from a content provider that supports 
             and  -->
        <category android:name="android.intent.category.OPENABLE" />
    </intent-filter>

完整代码

 
 
 

对应的xml:

 
 

 

5.5.6.2  打开特定类型的文件

点击“打开特定类型的文件”按钮跳转到文件夹,只有图片,选取图片返回。

具体代码

 

如需在该 UI 中提供您的应用的文件,并允许其他应用打开这些文件,您必须实现一个 ,并加入一个 Intent 过滤器 ()。例如

 

完整代码

 
 
 

对应的xml

 

5.5.7 本地操作 

叫车

 

过滤器

 

完整代码

 
 

对应的xml

 

5.5.8 地图

如上图左,点击“地图”,然后弹出选择地图,最后跳转到地图上,如果只有一个地图软件那么会直接跳到地图上

具体代码

 

过滤器

 

完整代码

 
 

对应的xml

 

5.5.9 音乐或视频

5.5.9.1播放媒体文件

 

过滤器

 

 

 

对应的 xml:

 

5.5.9.2基于搜索查询播放音乐

对应的xml:

 
 
 
 
 

5.5.10 新笔记

具体代码

 

过滤器

 

完成代码

 
 

对应的xml:

 

5.5.11 电话

如上图点击“发起通话”,跳转到通话页面

需要添加权限:<uses-permission android:name="android.permission.CALL_PHONE" />

具体代码

 

完整代码

 

 

 

对应的xml

 

5.5.12 搜索

点击左侧“搜索”,跳转到右侧页面。

5.5.12.1 使用特定应用搜索

点击“使用特定应用搜索”按钮如图,弹出选择框。

具体代码:过滤器

 

完整代码

 
 

5.5.12.2 执行网页搜索

如上图所示点击“执行网页搜索”,跳转到网页搜索。

具体代码

 

完整代码

 
 

对应的xml

 

5.5.13 设置

可以设置很多,以设置wifi为例。如上图点击左侧甚至,跳转到wifi列表。

完整代码

 
 

对应的xml:

 

5.5.14 发送短信

如需发起短信或彩信,请使用以下其中一个 Intent 操作,并使用下列 extra 键指定电话号码、主题和消息正文等消息详情。

具体代码

 或
 或

过滤器

 

完整代码

 
 

对应的xml

 

5.5.15 网络浏览

具体代码

 

过滤器

 

完整代码

 
 

对应的xml:

 

 

android互助群

 

转发标明出处 https://blog.csdn.net/qq_35698774/article/details/105966038

感谢:https://developer.android.google.cn/guide/components/intents-filters

感谢:https://www.jianshu.com/p/67d99a82509b

最新文章
AI领域“国字号”赛事为何“钟爱”青岛
青岛新闻网12月9日讯 12月5日至8日,2024年全国行业职业技能竞赛第三届全国人工智能应用技术技能大赛决赛在青岛举行。作为我国面
13种跳转页面方法
我们来说说13种页面跳转方法先来介绍一下在服务端JSP脚本中跳转页面的4种方法:response.sendRedirct(“跳转到页面”); 该方法通
GoogleChrome浏览器 131.0.6776.0官方下载
谷歌浏览器是一款快速、安全且免费的网络浏览器,能很好地满足新型网站对浏览器的要求,Chrome谷歌浏览器可让您更快速、轻松且安
LinkedIn(领英)是什么
LinkedIn(领英),全球最大职业社交网站,是一家面向商业客户的社交网络(SNS),网站的目的是让注册用户维护他们在商业交往中
AI智能写作助手:为学术和工作提供高效支持
### AI智能写作助手:为学术和工作提供高效支持在21世纪的今天,人工智能(AI)已经渗透到我们生活的各个方面,从智能家居到自动
2024年排列三332期[明日之星]免费分析预测
根据一定牛排三开奖走势图综合分析:回顾:上期开出712 组六形态大小形态为大小小,大小比为1:2,奇偶形态为奇奇偶,质合形态为质
100款有色行情软件APP:详解行业领先APP的功能与使用技巧,帮助用户选择最适合的软件
随着有色金属行业的发展,行情数据的及时获取变得尤为重要。为了帮助投资者和行业人士实时了解市场动态,许多有色行情软件应运而
3D25日连号走势图近1000期带连线
功能类福彩3D显示遗漏:显示/隐藏遗漏值,遗漏值是指自上期开出到本期间隔的期数。福彩3D遗漏分层:是将当前遗漏值用柱状图形标
SEO排名优化软件,如何有效助力朋友提升网站排名?
在这个信息爆炸的时代,网站想要在茫茫网海中脱颖而出,SEO(搜索引擎优化)无疑是一项至关重要的技能。我深知,许多朋友都曾为
推荐一款强大的文本生成器:UBFG
废物垃圾检测29-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rarlinchuk_waste_detection_di