Android:Action 与 Data 属性

2023-11-04

前言

Intent 的中文翻译就是“意图”的意思,它是 Android 程序中传输数据的核心对象。在 Android 官方文档中,对 Intent 的定义是执行某操作的一个抽象描述。
一个 Intent 对象实质上是一组被捆绑的信息,它可以是对 Intent 有兴趣的组件信息(如要执行的动作和要作用的数据),也可以是 Android 系统感兴趣的信息(如处理 Intent 组件的分类信息和如何启动目标活动的指令等)。Intent 对象主要包含 Component name、Action、Category、Data、Extras、Flags 6种属性。

属性 作用
Component name 指定为处理 Intent 对象的组件名称
Action Intent 要完成的一个动作
Category 用来对执行动作的类别进行描述
Data 向 Action 提供要操作的数据
Extras 向 Intent 组件添加附加信息
Flags 指示 Android 程序如何去启动一个 Activity

Component name

Component name 属性用来设置 Intent 对象的组件名称,它的属性值是一个 ComponentName 对象,要创建一个 ComponentName 需要指定包名和类名——这就可以唯一的确定一个组件类,这样应用程序就可以根据给定的组件类去启动特定的组件。

Action(动作)

Action 属性用来指定将要执行的动作。它很大程度上决定了 Intent 如何构建.
Action 与 Data、Extras 属性。它们的关系就像一个方法名决定了参数和返回值一样,正是由于这个原因,所以应该尽可能明确指明动作,并紧紧关联到其他 Intent 字段。

Data(数据)

Data 属性通常用于向 Action 提供要操作的数据。它可以是一个 URI 对象,通常情况下包含数据的 URI 和 MIME 类型,不同的 Action 有不同的数据规格,其采用 “数据类型:数据” 的格式。

Action 与 Data 的数据关联

操作类型 Data 格式
浏览网页 http://网页地址
拨打电话 tel:电话号码
发送短信 smsto:短信接收号码
查找 SD 卡文件 file:///sdcard/目录或文件
显示地图 geo:坐标,坐标
联系人信息 content://联系人信息

举例说明:Intent实现拨打电话、发送短信

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        ImageButton imageButton1 = (ImageButton) findViewById(R.id.phone);
        ImageButton imageButton2 = (ImageButton) findViewById(R.id.yx);

        //设置监听器对象
        imageButton1.setOnClickListener(listener);
        imageButton2.setOnClickListener(listener);
    }

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            ImageButton imageButton = (ImageButton) v;
            switch (imageButton.getId()) {
                case R.id.phone:
                    intent.setAction(intent.ACTION_DIAL);           //打开拨号面板
                    intent.setData(Uri.parse("tel:12345678"));   //拨打电话号码
                    startActivity(intent);  //启动Activity
                    break;
                case R.id.yx:
                    intent.setAction(intent.ACTION_SENDTO);         //打开发送短信界面
                    intent.setData(Uri.parse("smsto:123123123"));   //发送短信号码
                    intent.putExtra("sms_body", "hello!");   //设置信息内容
                    startActivity(intent);  //启动 Activity
            }
        }
    };
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example71">
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Example">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="#999999"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="网址:http://www.~.com\n企业邮箱:123123123@qq.com\n服务电话:123123123"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="100dp"
        android:layout_marginLeft="10dp"
        android:textSize="25dp"
        android:textColor="#FFFFFF"
        android:id="@+id/text"/>

    <ImageButton
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_marginTop="20dp"
        android:id="@+id/phone"
        android:layout_below="@+id/text"
        android:layout_marginLeft="20dp"
        android:background="@drawable/phone"
        />
    <ImageButton
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_marginTop="20dp"
        android:id="@+id/yx"
        android:layout_below="@+id/text"
        android:layout_toRightOf="@+id/phone"
        android:layout_marginLeft="20dp"
        android:background="@drawable/yx"
        />

</RelativeLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:Action 与 Data 属性 的相关文章

  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JFace ColumnWeigthData 导致父级增长

    我有一个 Eclipse RCP 应用程序 并且想要在TableViewer using ColumnWeigthData as ColumnLayoutData 问题是父表单 ScrolledForm在示例代码中 每当我布局表格时都会增加
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • 当您在数组列表上调用remove(object o)时,它如何比较对象?

    当您在 java 中的数组列表上调用remove object o 时 它如何比较对象以找到要删除的正确对象 它使用指针吗 或者它使用 Comparable 接口来比较对象吗 ArrayList remove 依赖于对象的实现Equal方法
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • Glass 语音命令给定列表中最接近的匹配项

    使用 Glass 您可以通过 确定 Glass 菜单启动应用程序 它似乎会选择最接近的匹配项 除非命令相距数英里 并且您可以明显看到命令列表 无论如何 是否可以从应用程序内或从语音提示 在初始应用程序触发后 给出类似的列表并返回最接近的匹配
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • 如何构建自定义摄像机应用程序?

    我正在尝试开发一个自定义摄像机录像机 当我的设备在 Activity 的 beginRecording 中执行 start MediaRecorder 方法时 应用程序崩溃 我不知道出了什么问题 因为我遵循谷歌API指南 http deve
  • 我在 PopupMenu 中使用 ShareActionProvider,但显示两个 PopupMenu?

    我在 PopupMenu 中使用 ShareActionProvider 但是当我单击共享菜单项时 它会在屏幕上显示两个 PopupMenus 一个被另一个覆盖 一个显示应用程序图标和名称 另一个仅显示应用程序名称 除了这个问题之外 它工作
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se
  • 如何在布局编辑器中模拟沉浸式模式

    我想在布局编辑器中全屏查看我的布局 我正在使用 eclipse 插件 我已经通过选择隐藏了 ActionBar NoActionBar组合中的主题 但导航栏是一个不同的故事 AFAIK 它只能使用代码中的标志来隐藏 我需要在活动 xml 文
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement
  • 将焦距(以毫米为单位)转换为像素 - Android

    在 Android 中 我当前正在访问camera s焦距通过使用getFocalLength in Camera1 Camera2不是一个选择 我正在尝试完全填充当前的计算 focal length pix focal length m

随机推荐

  • 第2章-爬虫请求模块

    第2章 爬虫请求模块 一 urllib request模块 1 urlretrieve 2 urlopen 3 Request 二 urllib parse模块 1 urlencode 2 quote 三 urllib请求方式举例 1 GE
  • CNN提取图片特征,之后用SVM分类

    https blog csdn net qq 27756361 article details 80479278 先用CNN提取特征 之后用SVM分类 平台是TensorFlow 1 3 0 rc0 python3 6 这个是我的一个小小的
  • SpringBoot线程池使用详解

    前提摘要 基于Springboot 2 1 4 RELEASE 配置TaskExecutor import java util concurrent ThreadPoolExecutor import org springframework
  • c++实现串口通讯踩坑(argument of type “char *“ is incompatible with parameter of type “LPCWSTR“)

    在C下 可以使用outportb和inportb进行串口通讯 C 没有这两个函数 那就使用createfile吧 通过网上搜到读取打开串口的例子 如下 include
  • 初探Spring Data Elasticsearch

    个人博客 dogbin vip Spring Data Elasticsearch 介绍 Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作 将原始操作 Elas
  • Steam游戏《TownScaper》技术分析!

    TownScaper是今年6月份上线Steam的建造类游戏 不过它的作者已经在twitter做了一年多的游戏开发日志 结合2019年欧洲独立游戏大会的一场演讲 EPC2018一场演讲 输出一下这个游戏的技术要点 首先作者从业经验非常令人羡慕
  • 计算阶乘的两种实现方式(Java)

    本文以计算5的阶乘为例 5 5 4 3 2 1 120 一 循环阶乘 1 While循环 public class TestWhileFactorial public static void main String args int res
  • 数字图像处理:局部直方图处理(Local Histogram Processing)

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 在前面章节 数字图像处理 直方图均衡学习总结 感悟 数字图像直方图匹配或规定化Histogram Matching Specific
  • 【C++】struct VS class

    文章目录 面向过程 面向对象 C 的struct和class 1 和C的struct的小差异 2 访问权限符 3 类的大小 类的存储 4 成员函数如何区分对象 5 struct和class的区别 6 this指针的两个面试题 一 this存
  • CMake 学习笔记(target_compile_features())

    CMake 学习笔记 target compile features 这一篇博客讲一讲target compile features 这条命令时 CMake 3 1 引入的 在这个之前 如果我们要设置C 编译开启 C 11 的支持 需要用如
  • SourceInsight修改暗灰色护眼主题(模仿vscode和sublime text的风格)

    SourceInsight护眼主题 仿vscode和sublime text 一 仿vscode 二 仿sublime text 三 自己动手 丰衣足食 1 载入主题 2 自制或修改主题 一 仿vscode 效果图 主题文件下载链接 htt
  • 配置MQTT

    MQTT 文章目录 MQTT 快速上手 源码安装mosquitto 配置Broker SDK调用接口 Python NodeJs WebJs Java C 快速上手 安装Broker服务 apt install mosquitto mosq
  • 泊松分布与泊松回归模型

    泊松分布 Poisson分布 法语 loi de Poisson 英语 Poisson distribution 译名有泊松分布 普阿松分布 卜瓦松分布 布瓦松分布 布阿松分布 波以松分布 卜氏分配等 是一种统计与概率学里常见到的离散概率分
  • Go 语言面试题(二):实现原理

    文章目录 Q1 init 函数是什么时候执行的 Q2 Go 语言的局部变量分配在栈上还是堆上 Q3 2 个 interface 可以比较吗 Q4 两个 nil 可能不相等吗 Q5 简述 Go 语言GC 垃圾回收 的工作原理 Q6 函数返回局
  • Android RxJava:功能性操作符 全面讲解

    前言 Rxjava 由于其基于事件流的链式调用 逻辑简洁 使用简单的特点 深受各大 Android开发者的欢迎 Github截图 如果还不了解 RxJava 请看文章 Android 这是一篇 清晰 易懂的Rxjava 入门教程 RxJav
  • Python特点及优势

    Python介绍 Python由荷兰数学和计算机科学研究学会的吉多 范罗苏姆 于1990 年代初设计 作为一门叫做ABC语言的替代品 Python提供了高效的高级数据结构 还能简单有效地面向对象编程 Python语法和动态类型 以及解释型语
  • [远程办公] 通过阿里云反向代理实现内网穿透

    准备工作 购买一台阿里云服务器 新用户第一个月免费 由于仅作数据转发用 配置要求不高 除了传输带宽外 其余配置选最低的就行 内网主机 生成ssh密匙 ssh keygen 与远程主机建立免密登录ssh copy id root ip 安装依
  • docker安装tomcat,以及常用操作

    1 安装tomcat镜像 访问docker hub仓库找出你想安装的版本 docker hub 网址 https registry hub docker com 直接在搜索框里搜tomcat就可以 如果想把自己镜像放到上边就自己注册一个账号
  • Docker 搭建sonarqube,并集成阿里P3C规则

    简介 本文安装的sonarqube是7 6 community版本 未安装最新版是因为7 9之后不再支持mysql 如果你安装的是其他版本的sonarqube 那么不要使用插件包中的插件 会有版本兼容性问题 插件 插件包 插件包中包含jav
  • Android:Action 与 Data 属性

    前言 Intent 的中文翻译就是 意图 的意思 它是 Android 程序中传输数据的核心对象 在 Android 官方文档中 对 Intent 的定义是执行某操作的一个抽象描述 一个 Intent 对象实质上是一组被捆绑的信息 它可以是