Android核心 intent基础
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基础相关推荐
- 传智播客Android核心基础课程视频教程(收藏)
收藏一下防止丢了 传智播客Android核心基础课程视频教程 http://dl.dbank.com/c06oaccbzg#
- Android手机开发总结——Android核心分析
导读:对于Android开发者来说,成系列的技术文章对他们的技术成长帮助最大.如下是我们向您强烈推荐的主题为Android开发的第一个系列文章. <Android核心分析>整理如下: 1. ...
- 《Android移动应用基础教程》(Android Studio)(第二版)黑马程序员 课后习题答案
<Android移动应用基础教程>(Android Studio)(第二版)黑马程序员 课后习题答案 目录 第1章 Android基础入门 第2章 Android常见界面布局 第3章 An ...
- 湖南某科技大学 安卓Android移动开发基础期中考试笔记(持续更新)
湖南某科技大学 安卓Android移动开发基础期中考试笔记 前言 建议大家把第三章的三个实战演练和本笔记的所有代码部分都在AS中手打一遍,手打的意思是看懂之后自己写出来,而不是照着抄.这不90分就到手 ...
- Android核心分析
导读:对于Android开发者来说,成系列的技术文章对他们的技术成长帮助最大.如下是我们向您强烈推荐的主题为Android开发的第一个系列文章. <Android核心分析>整理如下: 1. ...
- 《Android 移动应用基础教程(Android Studio)(第2版)》【课本客观题】+【学习通2023春】【参考答案】
文章目录 超星学习通智能终端软件开发(基于Android Studio环境)章节作业(39) 一 二 三 四 五 六 课本一 课本二 课本三 课本四 课本五 课本六(无) 课本七 课本八 课本九 课本 ...
- 3.1 Android组件intent filter
3.1.0 Intent filter基本概念 前面章节我们说到了Intent,Intent对象中除了ComponentName可以直接指定目标组件外,其它的属性都无法直接指定目标组件.当然我们这里不 ...
- android 启动服务同时传递数据,Android Studio开发基础之起动Service,并通过从Activity向Service传递数据...
Android Studio开发基础之启动Service,并通过从Activity向Service传递数据 本实例演示启动Service,并通过从Activity向Service传递数据,新建一个Se ...
- Android视频开发基础
Android视频开发基础 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/6205 ...
最新文章
- android相对布局底部对齐,Android,在edittext中输入时防止相对布局底部对齐的按钮向上移动...
- pytorch focalloss多分类 单分类
- css a标签去掉下划线_这30个CSS选择器,你必须熟记(上)
- oracle11g同步,Oracle11g三种数据同步方式-Oracle
- java.lang.unsatisfiedlinkerror:_java.lang.UnsatisfiedLinkError: 的问题
- java判断地图范围_百度地图java 判断当前位置是否在多边形区域内
- java 图片缓存工具,java缓存读取图片解决方案
- java学习(96):线程的睡眠
- LeetCode 63. Unique Paths II
- 前端实用小工具(URL参数截取、JSON判断、数据类型检测、版本号对比等)
- GitHub 又又又挂了?
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- php文件苹果用什么软件打开,教你用什么软件打开php文件
- win10user文件夹迁移_Win10纯净版下迁移用户文件的技巧
- 基本农田卫星地图查询_别被迷惑了,你手机上的北斗导航App和北斗卫星导航没关系...
- SketchUp: Modeling from Photos SketchUp教程:从照片建模 Lynda课程中文字幕
- List排序Sort和OrderBy方法(C#)
- java编写关机恶搞程序,VB关机恶搞小程序
- linux系统定时器中断优先级,请教定时器中断与串口中断优先级配置问题
- Windows与macOS水火不容?有了它一切搞定