Intent(一简介)

一个安卓程序由多个组件组成,各个组件之间可以使用Intent进行交流。Intent对象包含了组件名称、动作、数据、种类、额外、标记等内容。

组件名称:

组件名称的类是指:ComponentName
          作用:可以跳转到不同的Activity
          设置方法:Intent可以使用setComponent()、setClass()、setClassName()设置需要跳转到的Activity

最常用的跳转代码:

 Intent intent1 = new Intent(MainActivity.this,Main2Activity.class);startActivity(intent1);

另一种写法(1):

 ComponentName componentName = new ComponentName(MainActivity.this,Main2Activity.class);Intent intent = new Intent();//setComponent()intent.setComponent(componentName);startActivity(intent);

另一种写法(2):

  Intent intent = new Intent();//setClass()intent.setClass(MainActivity.this,Main2Activity.class);startActivity(intent);

另一种写法(3):

Intent intent = new Intent();
//setClassName()
intent.setClassName(MainActivity.this,"com.example.newland.f20190814.Main2Activity");
startActivity(intent);

另一种写法(4):

Intent intent = new Intent();
//参数基本都可以写成包名,完全限定类名
intent.setClassName("com.example.newland.f20190814","com.example.newland.f20190814.Main2Activity");
startActivity(intent);

以上写法效果都相同,最常用的还是用Intent跳转

动作(Action):

Action,是一个字符串,用来表示将要执行的动作。在Intent中定义了一系列动作的常量,他们包括标准的Activity与标准广播。

标准Action:

一下列举最常用的两个,更多的还要参考Android 的官方API。
其用来 启动Activity 的标准动作

常量 描述
ACTION_MAIN 作为初始的Activity启动,没有数据的输入/输出
ACTION_EDIT 将数据显示给用户编辑

使用他们经常调用Intent的startActivity()方法跳转。
可以使用Intent的setAction()来设置动作,或者直接在Inteng的默认构造中写入参数来设置Action,参数都为String类型。
参数格式要发生转换
例如:ACTION_MAIN要写写成android.intent.action.MAIN。

标准广播:

其用于 接收广播 的标准动作
一下列举两个例子,更多的还要参考Android 的官方API。

常量 描述
ACTION_SHUTDOWN 通知设备已经关闭
ACTION_PACKAGE_ADDED 通知新应用的程序包已经安装到设备上

应用时同样要发生参数格式的转换

ACTION_SHUTDOWN要写成android.intent.action.SHUTDOWN

除此之外,用户也可以自定义动作字符来启动应用组件,自定义的字符要包含你的包名。Action很大程度上决定了Intent的其他部分,特别是数据(Data)、额外(Extras)。

数据(Data)

Data表示操作数据的URI和MIME(媒体类型)的类型。不同的动作与不同类型的数据相匹配
Intent显示设置数据类型的方法:
setData();指定数据类型为URI
setType();指定数据类型为MIME
setDataAndType();指定数据类型即为URI又为MIME
getData();读取数据类型URI
getType();读取数据类型

种类(Category)

Category是一个字符串,其包含类Intent的组件类型的附加信息。可以增加任意个Category进行描述。

常量 描述
CATEGORY_HOME 如果是Home Activuty ,则进行设置
CATEGORY_TEST 如果用于测试,则进行设置

更多种类请参考官方API,以上仅为两个例子

使用时同样需要进行参数格式的转换,与之前的不同:

例如CATEGORY_HOME要写成android.intent.category.HOME

使用addCategory()可以增加种类
使用removeCategory()可以移除上次增加的种类
使用getCategory()可以查看当前Intent中所有的中种类

额外(Extras)

其是一组键值,包含了传递的信息,用于Activity之间的信息传递等,用法请看之前的文章:
Android四大组件Activity

标记(Flags)

标记用来表示不同来源的Flags。多数用于指示Android 系统如何启动Activity,以及启动之后如果操作等,所有标记都在Intent中,所有的标记都是整数

一个案例:一个按钮返回Home界面,一个按钮打开百度的页面(别忘了打开网络的权限):
主布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="返回Home"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="浏览网页"/></LinearLayout>

主活动文件:

package com.example.newland.f20190814;import android.content.ComponentName;
import android.content.Intent;
import android.drm.DrmStore;
import android.net.Uri;
import android.support.v4.view.KeyEventDispatcher;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1 = findViewById(R.id.btn1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setAction("android.intent.action.MAIN");intent.addCategory("android.intent.category.HOME");startActivity(intent);}});Button button2 = findViewById(R.id.btn2);button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);}});}
}

Intent(二使用)

intent分为显示与隐示
显示:
    通过指定组件名称来指定目标组件
隐示:
    不指定具体的组件名称,用于激活其他应用程序中的组件

以上可以通过intent过滤器来区分,没有任何过滤器的仅能用显示实现,有过滤器的既能用显示,又可以用隐示。

Intent过滤器中仅与三方面有关,分别是Action、Category、Data,而Extras与Flags决定组件的接收,在这里无作用。

仅当过滤器中的三方面与java中设置的Intent完全吻合是才能跳转到指定的页面,
否则会面临页面的选择或者,失败等情况

四大组件中Activity、Service、Broadcast Receiver能够定义多个Intent过滤器来通知系统他们可以通过哪些隐示的Intent。

过滤器是IntentFilter类的实例,其通常不在Java代码里实现,而是在配置文件中使用<intent-filter>标签实现。因为程序在启动时,系统必须了解每个组件的能力。

这里特别提示:
如果过滤器中包含Category 则必须添加一个默认的种类:

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

如果过滤器中包含Data,则必须注意数据的填写格式:

scheme://host:port/path

等价于,(AndroidManifest.xml中直接写,在Java文件中才加入“ : // : / ”这些符号)

content://com.example.project:200/folder

上下一一对应

例子:
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.newland.f20190814"><uses-permission android:name="android.permission.INTERNET"></uses-permission><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".Main2Activity"><intent-filter><action android:name="QQ"/><category android:name="android.intent.category.DEFAULT"/><category android:name="MM"/><data android:scheme="http" android:host="www.baidu.com" android:port="200"/></intent-filter></activity></application></manifest>

主布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="跳转"/></LinearLayout>

主活动

package com.example.newland.f20190814;import android.content.ComponentName;
import android.content.Intent;
import android.drm.DrmStore;
import android.net.Uri;
import android.support.v4.view.KeyEventDispatcher;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1 = findViewById(R.id.btn1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.setAction("QQ");intent.addCategory("MM");intent.setData(Uri.parse("http://www.baidu.com:200"));startActivity(intent);}});}
}

待跳转的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Main2Activity"><TextViewandroid:text="欢迎来到第二个页面"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</LinearLayout>

待跳转的活动:

package com.example.newland.f20190814;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class Main2Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);}
}


Android核心 intent基础相关推荐

  1. 传智播客Android核心基础课程视频教程(收藏)

    收藏一下防止丢了 传智播客Android核心基础课程视频教程  http://dl.dbank.com/c06oaccbzg#

  2. Android手机开发总结——Android核心分析

    导读:对于Android开发者来说,成系列的技术文章对他们的技术成长帮助最大.如下是我们向您强烈推荐的主题为Android开发的第一个系列文章. <Android核心分析>整理如下: 1. ...

  3. 《Android移动应用基础教程》(Android Studio)(第二版)黑马程序员 课后习题答案

    <Android移动应用基础教程>(Android Studio)(第二版)黑马程序员 课后习题答案 目录 第1章 Android基础入门 第2章 Android常见界面布局 第3章 An ...

  4. 湖南某科技大学 安卓Android移动开发基础期中考试笔记(持续更新)

    湖南某科技大学 安卓Android移动开发基础期中考试笔记 前言 建议大家把第三章的三个实战演练和本笔记的所有代码部分都在AS中手打一遍,手打的意思是看懂之后自己写出来,而不是照着抄.这不90分就到手 ...

  5. Android核心分析

    导读:对于Android开发者来说,成系列的技术文章对他们的技术成长帮助最大.如下是我们向您强烈推荐的主题为Android开发的第一个系列文章. <Android核心分析>整理如下: 1. ...

  6. 《Android 移动应用基础教程(Android Studio)(第2版)》【课本客观题】+【学习通2023春】【参考答案】

    文章目录 超星学习通智能终端软件开发(基于Android Studio环境)章节作业(39) 一 二 三 四 五 六 课本一 课本二 课本三 课本四 课本五 课本六(无) 课本七 课本八 课本九 课本 ...

  7. 3.1 Android组件intent filter

    3.1.0 Intent filter基本概念 前面章节我们说到了Intent,Intent对象中除了ComponentName可以直接指定目标组件外,其它的属性都无法直接指定目标组件.当然我们这里不 ...

  8. android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...

    Android Studio开发基础之启动Service,并通过从Activity向Service传递数据 本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Se ...

  9. Android视频开发基础

    Android视频开发基础 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/6205 ...

最新文章

  1. android相对布局底部对齐,Android,在edittext中输入时防止相对布局底部对齐的按钮向上移动...
  2. pytorch focalloss多分类 单分类
  3. css a标签去掉下划线_这30个CSS选择器,你必须熟记(上)
  4. oracle11g同步,Oracle11g三种数据同步方式-Oracle
  5. java.lang.unsatisfiedlinkerror:_java.lang.UnsatisfiedLinkError: 的问题
  6. java判断地图范围_百度地图java 判断当前位置是否在多边形区域内
  7. java 图片缓存工具,java缓存读取图片解决方案
  8. java学习(96):线程的睡眠
  9. LeetCode 63. Unique Paths II
  10. 前端实用小工具(URL参数截取、JSON判断、数据类型检测、版本号对比等)
  11. GitHub 又又又挂了?
  12. 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
  13. php文件苹果用什么软件打开,教你用什么软件打开php文件
  14. win10user文件夹迁移_Win10纯净版下迁移用户文件的技巧
  15. 基本农田卫星地图查询_别被迷惑了,你手机上的北斗导航App和北斗卫星导航没关系...
  16. SketchUp: Modeling from Photos SketchUp教程:从照片建模 Lynda课程中文字幕
  17. List排序Sort和OrderBy方法(C#)
  18. java编写关机恶搞程序,VB关机恶搞小程序
  19. linux系统定时器中断优先级,请教定时器中断与串口中断优先级配置问题
  20. Windows与macOS水火不容?有了它一切搞定

热门文章

  1. 渐变多彩创意双十二活动方案主题PPT
  2. 页面中的表格如何画斜线
  3. Redis过期时间及过期策略
  4. 2015北京科技大学869计算机组成原理考试大纲,2014年北京科技大学869计算机组成原理考研真题...
  5. C语言pow()函数:求x的y次方(次幂)
  6. 智能手机扬声器、听筒及耳机阻抗及音频效果比较
  7. 第五届蓝桥杯 软件类省赛真题 第八题:兰顿蚂蚁
  8. pion实现录制WebRTC流
  9. LiveData vs EventBus?是否可以实现共赢
  10. vue的生命周期(详细)