我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android中Intent组件的入门学习心得

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android中Intent组件的入门学习心得

什么是 Intent ?

Intent是Android开发中一个非常重要且常用的类,Intent是一个消息传递对象,可以用来从其他应用组件请求操作,使用Intent可以在一个组件中同一APP中的另一个组件或者是启动另一个APP的组件(这里所说的组件包括Activity、Service和Broadcast)。

ctivity、service和broadcast receiver之间是通过Intent进行通信的,而另外一个组件Content Provider本身就是一种通信机制,不需要通过Intent。我们来看下面这个图就知道了:

如果Activity1需要和Activity2进行联系,二者不需要直接联系,而是通过Intent作为桥梁。通俗来讲,Intnet类似于中介、媒婆的角色。

安卓官方对于Intent的介绍

Intent 的类型?

Intent 有两种类型,分别是 显式 Intent 和 隐式 Intent 。

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

隐式 Intent: 不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理。例如,如需在地图上向用户显示位置,则可以使用 隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。使用 隐式 Intent 时,Android 系统通过将 Intent 的内容与在设备上其他应用的清单文件中声明的 Intent 过滤器 进行比较,从而找到要启动的相应组件。如果 Intent 与 Intent 过滤器匹配,则系统将启动该组件,并向其传递 Intent 对象。如果多个 Intent 过滤器兼容,则系统会显示一个对话框,支持用户选取要使用的应用。

Intent 的组成

intent由组件名称(Component name)、操作(Action)、数据(Data)、类别(Category)、额外的数据(Extra)和标志(Flag)六个部分组成。

组件名称 Component name:

组件名称是要启动的组件名称。如果使用的是 显式 Intent 则必须指定此参数,否则 Intent 无法识别要传递给哪个应用组件。不指定此参数则为 隐式 Intent ,系统将根据其他 Intent 信息决定要接受 Intent 的应用组件。如果想要启动特定的组件,则必须要指定此参数为该组件的名称。

操作 Action:

操作指定要执行的通用操作的字符串。可以自定义自己的操作,但是通常应该使用由 Intent 类或其他框架类定义的操作常量(例如 ACTION_VIEWACTION_SEND)。

数据 Data:

数据是引用待操作数据或该数据 MIME 类型的 URI 对象。提供的数据类型通常由 Intent 的操作决定。创建 Intent 时,除了指定 URI 以外,指定数据类型(其 MIME 类型)往往也很重要。

类别 Category:

类别是一个包含应处理 Intent 组件类型的附加信息的字符串。可以将任意数量的类别描述放入一个 Intent 中,但大多数 Intent 均不需要类别。以下是一些常见类别:

CATEGORY_BROWSABLE

目标 Activity 允许本身通过网络浏览器启动,以显示链接引用的数据,如图像或电子邮件。

CATEGORY_LAUNCHER

此类别描述了该 Activity 是任务的初始 Activity,当系统启动时首先启动此 Activity。

额外的数据 Extra:

携带完成请求操作所需的附加信息的键值对。正如某些操作使用特定类型的数据 URI 一样,有些操作也使用特定的 extra。

标志 Flag:

标志在 Intent 类中定义,充当 Intent 的元数据。标志可以指示 Android 系统如何启动 Activity(例如,Activity 应属于哪个任务),以及启动之后如何处理(例如,Activity 是否属于最近的 Activity 列表)。

显式 Intent 的使用

首先新建一个 Activity 以及相应的布局文件。

MyActivity


import androidx.annotation.Nullable;
import android.app.Activity;
import android.os.Bundle;

public class MyActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myactivity);
    }
}

myactivity.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MyActivity">
    <TextView
        android:text="这是一个新的页面"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

在清单文件 AndroidManifest.xml 中注册 MyActivity


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication1">

    <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.MyApplication1">
        <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>
        <activity android:name=".MyActivity"/>
    </application>

</manifest>

此处android:name中使用 .MyActivity 是为了程序在运行时直接将该 name 添加到 package 后,这样方便程序去寻找此Activity并启动,也可以将package复制添加到 android:name 中,例如<activity android:name="com.example.myapplication1.MyActivity"/> 。

在 MainActivity 中设定一个按钮 id 为 startNew ,当按下该按钮时启动 MyActivity 。


public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.startNew).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,MyActivity.class));
            }
        });
    }
}

此处在 new Intent(MainActivity.this,MyActivity.class) 中指明了要启动的 Activity 的名称,所以为显式 Intent 。

运行效果:

隐式 Intent 的使用

首先在清单文件 AndroidManifest 中修改 MyAcitivity 的相关定义。


<activity
    android:name=".MyActivity"
    android:exported="true">
    <intent-filter>
        //为此intent定义一个新的action名称
        <action android:name="NewAction"/>
        //若指定category为DEFAULT,则指明此intent的行为方式是Activity
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

修改 MainActivity ,将原本的显式 Intent 启动方式改为隐式 Intent ,即通过自定义的 action 名称来启动相对应的 Activity 。


public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.startNew).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //此处使用NewAction调用MyActivity
                startActivity(new Intent("NewAction"));
            }
        });
    }
}

这样就成功通过隐式 Intent 启动 MyActivity 。

通常建议将 定义为 “包.intent.action.组件名” 。可以通过在组件中定义静态变量来更加方便地访问该组件。例如,public static final String ACTION = "com.example.myapplication1.intent.action.MyActivity";

调用时直接使用 MyActivity.ACTION 即可。


public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.startNew).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //此处使用NewAction调用
                startActivity(new Intent(MyActivity.ACTION));
            }
        });
    }
}

运行效果与显式 Intent 相同。

通过隐式 Intent ,组件可以对不同APP之间的组件进行访问。如果想让本应用的组件可以被其他的应用进行访问,则需要对 activity 标签加上一个属性 android:exported ,当 android:exported 为 true 时,本组件可以被其他应用组件访问,为 false 时则不可被其他应用访问,并弹出异常警告。可以在启动其他应用组件时加上异常捕获语句,例如,


public void onClick(View view) {
    try {
        startActivity(new Intent(MyActivity.ACTION));
    }catch (Exception e){
        Toast.makeText(MainActivity.this,"无法启动指定的Activity",Toast.LENGTH_SHORT).show();
    }
}

本文大部分参考了Android中对Intent部分的描述,希望本文对大家更好地使用Intent对象有所帮助。

总结

到此这篇关于Android中Intent组件入门学习的文章就介绍到这了,更多相关Android Intent组件学习内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android中Intent组件的入门学习心得

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

深入学习Android中的Intent

Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,使用Intent可以激活Android应用的三种类型的核心组件:活动Activity、服务Service、广播接受者Broadcast。 In
2022-06-06

Android app开发中的Fragment入门学习教程

在Android3.0上开始引入了一个新概念叫Fragment。它有自己的布局文件,可以作为组件排布,也可以相互组合去实现不同的布局显示。使用Fragment可以重复利用代码,并且可以满足不同设备尺寸的需求。Fragment不能单独存在,只
2022-06-06

Android应用开发中使用Fragment的入门学习教程

Fragment是Android honeycomb 3.0开始新增的概念,Fragment名为碎片不过却和Activity十分相似,下面介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界
2022-06-06

Android App开发中ViewPager组件的入门使用教程

首先让大家有个全局的认识,直接上个项目,看看仅仅通过这几行代码,竟然就能完成如此强悍的功能。下篇再仔细讲讲为什么要这么写。 效果图: 实现了三个view间的相互滑动 第一个VIEW向第二个VIEW滑动:第二个VIEW向第三个VIEW滑动:一
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录