草庐IT

Android中Intent的介绍

休以希 2023-04-14 原文

一.Intent的介绍

Intent的中文意思是“意图,意向”, Intent对Android的核心和灵魂,是各组件之间的桥梁。四大组件分别为Activity 、Service、BroadcastReceiver、ContentProvider。

而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。

Intent的中文意思为“意图”,在Android中可以理解为想要做什么,What do want to do? 所以什么时候要用到Intent就很好理解了。

Activity、Service和Broadcast receiver之间是通过Intent进行通信的,而另外一个组件Content Provider本身就是一种通信机制,不需要通过Intent。

 

二.公共构造函数:

1、Intent() 空构造函数

2、Intent(Intent o) 拷贝构造函数

3、Intent(String action) 指定action类型的构造函数

4、Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider

5、Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的

6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体

Intent有六种构造函数,3、4、5是最常用的,并不是其他没用!

Intent(String action, Uri uri)  的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。

三.Intent的属性

Intent的相关属性:

  • Intent由以下各个组成部分:
  • component(组件):目的组件
  • action(动作):用来表现意图的行动
  • category(类别):用来表现动作的类别
  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写
  • extras(扩展信息):扩展信息(传值)
  • Flags(标志位):期望这个意图的运行模式

 

1.component:目的组件

Intent的Compent属性指定Intent的的目标组件的类名称。

  显示跳转

1、Intent跳转

    Intent intent =new Intent(源Activity的对象,目标Activity的class);

    startActivity(intent);

三种代码方式的跳转 其实代码都是一样

//No1

Intent intent = new Intent();

创建Intent组件来响应

 ComponentName cpN = new ComponentName(MainActivity.this, OtherActivity.class);

 intent.setComponent(cpN);

 startActivity(intent);

 //No2

 Intent intent = new Intent();

 intent.setClass(MainActivity.this, OtherActivity.class);

 startActivity(intent);

 //No3 更简单的

 Intent intent = new Intent(MainActivity.this, OtherActivity.class);

 startActivity(intent);

2.Action动作   用来表示意图的行动 不同应用之间使用Action跳转

category 类型 与Action是一起使用   不能少,也可以跳转,但是很含蓄

以下是Intent类中预定义的部分action:

ACTION_CALL--目标组件为activity, 代表拨号动作;

ACTION_EDIT--目标组件为activity, 代表向用户显示数据以供其编辑的动作;

ACTION_MAIN--目标组件为activity, 表示作为task中的初始activity启动;

ACTION_BATTERY_LOW--目标组件为broadcastReceiver, 提醒手机电量过低;

ACTION_SCREEN_ON--目标组件为broadcast, 表示开启屏幕.

3.data(数据):表示与动作要操纵的数据

    表示android要访问的数据 也可以在intent_filter里面设置

  • type(数据类型):对于data范例的描写
  • 一个完整的Uri由scheme、host、port、path组成,格式是<scheme>://<host>:<port>/<path>

//No6 播放音乐

        Intent intent = new Intent(); 

        intent.setAction(Intent.ACTION_VIEW);

       // intent.setData(Uri.parse("file://storage/朋友.mp3"));

        intent.setDataAndType(Uri.parse("file://storage/朋友.mp3"), "audio/mp3");

        startActivity(intent);

4. Category属性

Intent中的Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息。

<category android:name="android.intent.category.DEFAULT"/> 默认

<category android:name="android.intent.category.LAUNCHER" /> 系统启动

5. Type属性

Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

6.Intent的Extra属性

Intent的Extra属性是添加一些组件的附加信息。比如,如果我们要通过一个Activity来发送一个Email,就可以通过Extra属性来添加subject和body。

 

// 调用浏览器

Uri webViewUri = Uri.parse("http://blog.csdn.net/zuolongsnail");

Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);

// 调用地图

Uri mapUri = Uri.parse("geo:100,100");

Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);

// 播放mp3

Uri playUri = Uri.parse("file:///sdcard/test.mp3");

Intent intent = new Intent(Intent.ACTION_VIEW, playUri);

intent.setDataAndType(playUri, "audio/mp3");

// 调用拨打电话

Uri dialUri = Uri.parse("tel:10086");

Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);

// 直接拨打电话,需要加上权限

Uri callUri = Uri.parse("tel:10086");

Intent intent = new Intent(Intent.ACTION_CALL, callUri);

// 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的)

Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");

Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);

// 直接发邮件

Intent intent = new Intent(Intent.ACTION_SEND);

String[] tos = { "zuolongsnail@gmail.com" };

String[] ccs = { "zuolongsnail@163.com" };

intent.putExtra(Intent.EXTRA_EMAIL, tos);

intent.putExtra(Intent.EXTRA_CC, ccs);

intent.putExtra(Intent.EXTRA_TEXT, "the email text");

intent.putExtra(Intent.EXTRA_SUBJECT, "subject");

intent.setType("text/plain");

Intent.createChooser(intent, "Choose Email Client");

// 发短信

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.putExtra("sms_body", "the sms text");

intent.setType("vnd.android-dir/mms-sms");

// 直接发短信

Uri smsToUri = Uri.parse("smsto:10086");

Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);

intent.putExtra("sms_body", "the sms text");

// 发彩信

Uri mmsUri = Uri.parse("content://media/external/images/media/23");

Intent intent = new Intent(Intent.ACTION_SEND);

intent.putExtra("sms_body", "the sms text");

intent.putExtra(Intent.EXTRA_STREAM, mmsUri);

intent.setType("image/png");

// 卸载应用

Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);

Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);

// 安装应用

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");

// 在Android Market中查找应用

Uri uri = Uri.parse("market://search?q=愤怒的小鸟");

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

四.带返回结果的跳转

Intent intent = new Intent(MainActivity.this , OtherActivity.class);

//        startActivity(intent);

        //requestCode  int  请求码

        startActivityForResult(intent, requestCode);

必须覆写     当返回这个Activity的时候 响应

@Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        // TODO Auto-generated method stub

        super.onActivityResult(requestCode, resultCode, data);

    }

再另一个Activity上  设置结果码

//resultCode  结果码

        this.setResult(resultCode)

//设置结果码切 往回传递数据

Intent in = new Intent();

        in.putExtra("test", test);

        this.setResult(2,in);

注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。

Intent Action 隐士跳转 自定义的

调用系统的Action 其中系统的data type这些需要去查API。

 

有关Android中Intent的介绍的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  4. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  5. Spring Cloud Gateway 服务网关的部署与使用详细介绍 - 2

    为什么需要服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工作量很大。有了网关之后,网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务。使用网关的好处1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发

  6. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  7. ruby - Vim 详细介绍了 Rails 的自动完成功能 - 2

    我发现python的细节自动完成很好RubyonRails有类似的方法描述吗? 最佳答案 有篇不错的文章"UsingVIMasacompleteRubyonRailsIDE"其中引用rails.vim.这似乎是RailsforVIM的实际标准。(不过,我还没有使用过它,但很快就会尝试。)这允许你做很多与Rails相关的任务,但对自动完成没有帮助。还有一篇"RubyAutocompleteinVim"(遗憾的是不再可用)这就是您要搜索的内容。我不知道,理解Rails的所有插件魔法和元编程的东西是否足够聪明。它至少在vim的配置中提到了

  8. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

  9. Android Gradle 7.1+新版本依赖变化 - 2

    前一段时间由于工作需要把可爱的小雪狐舍弃了,找到了小蜜蜂。但是新版本的小蜜蜂出现了很多和旧版本不一样的位置。1.功能位置迁移,原来在工程build.gradle的buildscript和allprojects移动至setting.gradle并改名为pluginManagement和dependencyResolutionManagement。里面的东西依旧可以按照原来的copy过来。pluginManagement{repositories{gradlePluginPortal()google()mavenCentral()}}dependencyResolutionManagement{r

  10. ruby - Ruboto 的最佳教程(适用于 Android 的 ruby​​)? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我几乎用完了Ruby,但现在想试试Ruboto,android上的ruby​​。谷歌未能给我足够的(几乎没有结果)。所以任何人都可以分享一些关于Ruboto的教程。

随机推荐