Android Studio Intent使用(显式、隐式)

https://blog.csdn.net/u012005313/article/details/47006689

使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面。Intent用法分为显示和隐式

Intent概念:Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

Intent一般可被用于启动活动启动服务、以及发送广播等场景

 

##########################################################

前期准备工作

1.创建一个项目(IntentTest),使用一个默认的空的活动MainActivity

2.修改activity_main.xml布局文件

 

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  3. android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
  4. android:paddingRight="@dimen/activity_horizontal_margin"
  5. android:paddingTop="@dimen/activity_vertical_margin"
  6. android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
  7. <Button
  8. android:id="@+id/button_1"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:text="Button 1"
  12. />
  13. </RelativeLayout>

 

 

2.新建一个活动SecondActivity

Activity Name = SecondActivity 

Layout Name = activity_second

 

3.修改activity_second.xml布局文件

代码如下:

 

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent" android:layout_height="match_parent">
  4. <Button
  5. android:id="@+id/button_2"
  6. android:layout_width="match_parent"
  7. android:layout_height="wrap_content"
  8. android:text="Button 2"
  9. />
  10. </LinearLayout>

解释:定义一个按钮,按钮上文本显示为Button 2

 

4.修改SecondActivity.java类    

代码如下:

 

  1. public class SecondActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏
  6. setContentView(R.layout.activity_second);
  7. }

5.在AndroidManifest.xml中为SecondActivity活动进行注册

 

在<application></application>之间加入

 

  1. <activity
  2. android:name=".SecondActivity"
  3. android:label="@string/title_activity_second" >
  4. </activity>


note:SecondActivity不是主活动,不需要配置<intent-filter>标签里的内容

##############################################

 

显示使用Intent

Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls)

该构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文

第二个参数Class则是指定想要启动的目标活动

 

Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动,它接收一个Intent参数

我们将构建好的Intent传入startActivity()方法就可以启动目标活动

 

1.修改MainActivity类中按钮的点击事件

 

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. Button button=(Button)findViewById(R.id.button_1);
  6. button.setOnClickListener(new View.OnClickListener() {
  7. @Override
  8. public void onClick(View v) {
  9. Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  10. Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  11. startActivity(intent);
  12. }
  13. });
  14. }

 

2.修改SecondActivity类中按钮的点击事件

 

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. requestWindowFeature(Window.FEATURE_NO_TITLE);
  5. setContentView(R.layout.activity_second);
  6. Button button=(Button)findViewById(R.id.button_2);
  7. button.setOnClickListener(new View.OnClickListener() {
  8. @Override
  9. public void onClick(View v) {
  10. Toast.makeText(SecondActivity.this, "You Click Button 2", Toast.LENGTH_SHORT).show();
  11. finish();
  12. }
  13. });
  14. }


点击运行按钮,截图如下:

 

程序生成后,手机出现界面1,点击button1按钮,界面跳转到界面2,点击button2,界面跳转会界面1

 

###########################################

隐式使用Intent

隐式Intent通过指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮助我们找出合适的活动去启动

 

1.修改AndroidManifest.xml文件,修改活动如下:

 

  1. <activity
  2. android:name=".SecondActivity"
  3. android:label="@string/title_activity_second" >
  4. <intent-filter>
  5. <action android:name="com.example.activitytest.ACTION_START" />
  6. <category android:name="android.intent.category.DEFAULT" />
  7. </intent-filter>
  8. </activity>

在<action>标签中指明当前活动可以响应com.example.activitytest.ACTION_START这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category。

 

只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category,这个活动才能响应Intent

2.修改MainActivity类中按钮的点击事件

 

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. Button button=(Button)findViewById(R.id.button_1);
  6. button.setOnClickListener(new View.OnClickListener() {
  7. @Override
  8. public void onClick(View v) {
  9. Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  10. //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  11. Intent intent=new Intent("com.example.activitytest.ACTION_START");
  12. startActivity(intent);
  13. }
  14. });
  15. }

note: android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中

 

点击运行按钮,程序成功运行

#######################################################3

 

ADD:每个Intent中只能指定一个action,但却能够指定多个category.

上述的Intent中只有一个默认的category,再增加一个测试一下

1.修改AndroidManifest.xml文件

 

  1. <activity
  2. android:name=".SecondActivity"
  3. android:label="@string/title_activity_second" >
  4. <intent-filter>
  5. <action android:name="com.example.activitytest.ACTION_START" />
  6. <category android:name="android.intent.category.DEFAULT" />
  7. <category android:name="com.example.activitytest.MY_CATEGORY" />
  8. </intent-filter>
  9. </activity>
  10. </application>


2.修改MainActivity类中按钮的点击事件

 

 

  1. Button button=(Button)findViewById(R.id.button_1);
  2. button.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  6. //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  7. Intent intent=new Intent("com.example.activitytest.ACTION_START");
  8. intent.addCategory("com.example.activitytest.MY_CATEGORY");
  9. startActivity(intent);
  10. }



 

运行程序,成功

 

#################################################

隐式Intent的更多用法

使用隐式Intent,不仅可以启动自己程序内部的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享称为可能

 

例如:在应用程序中展示一个网页

修改MainActivity中按钮点击事件

 

  1. button.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  5. //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  6. //Intent intent=new Intent("com.example.activitytest.ACTION_START");
  7. //intent.addCategory("com.example.activitytest.MY_CATEGORY");
  8. Intent intent=new Intent(Intent.ACTION_VIEW);
  9. intent.setData(Uri.parse("http://www.baidu.com"));
  10. startActivity(intent);
  11. }
  12. });

程序中首先指定Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW.

 

然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去

 

此时重新运行程序,在MainActivity界面点击按钮就可以打开系统浏览器

 

例如:在程序中调用系统拨号界面

修改MainActivity中按钮点击事件

 

  1. Button button=(Button)findViewById(R.id.button_1);
  2. button.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  6. //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  7. //Intent intent=new Intent("com.example.activitytest.ACTION_START");
  8. //intent.addCategory("com.example.activitytest.MY_CATEGORY");
  9. Intent intent=new Intent(Intent.ACTION_DIAL);
  10. intent.setData(Uri.parse("tel:10086"));
  11. startActivity(intent);
  12. }
  13. });

 

Intent.ACTION_DIAL是一个Android系统的内置动作

--------------------- 本文来自 编号1993 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u012005313/article/details/47006689?utm_source=copy 

转载于:https://www.cnblogs.com/Nina-piaoye/p/9708927.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] 你有用过sass中的Mixin功能吗?它有哪些作用?

[css] 你有用过sass中的Mixin功能吗&#xff1f;它有哪些作用&#xff1f; 1.混合用法 2.函数用法1. mixin ellipsis-one {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }.test {inculde ellipsis-one;}2. mixin hoverColor ($color, $deepColor) {color: …

[css] 检测sass中错误的指令是哪个?

[css] 检测sass中错误的指令是哪个&#xff1f; debug伪指令检测错误&#xff0c;并将SassScript表达式值显示到标准错误输出流。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

淘宝首页的HTML以及CSS技术点

1、 一个网页的开发流程 内容结构&#xff0c;比如js、css页面结构。自上而下&#xff0c;从左往右。&#xff08;内容、颜色块、间距、边框&#xff09; 2、 line-height的5种设置方式及区别 normal || 1.5 || 150% || 50px || 5em 初始化元素的时候&#xff0c;一般使用 l…

Windows+Python 3.6环境下安装PyQt4

第一步&#xff1a;下载.whl&#xff0c;地址&#xff1a;https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4&#xff0c;这里可以下载不同的python版本对应的包。 第二步&#xff1a;选择一个目录&#xff0c;将下载好的文件放到该目录下&#xff0c;然后cmd下&#xff0c;c…

[css] sass是怎么定义变量的?

[css] sass是怎么定义变量的&#xff1f; sass变量可以理解为以$变量名为键的键值对&#xff0c;例如$color-black:#000个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

Mac book pro M1 安装 Homebrew

前话 各路神仙如果在看到这个文章的时候&#xff0c;已经折腾好久homebrew的安装了&#xff0c;那么&#xff0c;根据我这篇经验分享&#xff0c;如果能顺利安装成功的话&#xff0c;可能会出现一个error&#xff1a; Not a valid ref: refs/remotes/origin/master &#xff0…

洛谷 P4026 [SHOI2008]循环的债务

水水的dp 设f[i][a][b]表示交换完前i种面值的钞票&#xff0c;第一个人有a元&#xff0c;第二个人有b元的最小代价 直接转移就行了 需要注意的是算的式子 第1个人\(\Delta A\)&#xff0c;第二个人\(\Delta B\)&#xff0c;最小交换代价是\((|\Delta A||\Delta B||\Delta A\Del…

[css] 为什么要使用sass/less?

[css] 为什么要使用sass/less&#xff1f; 为了提示开发效率&#xff0c;使得css编写更加灵活个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Linux命令之sftp - 安全文件传输命令行工具

用途说明 sftp命令可以通过ssh来上传和下载文件&#xff0c;是常用的文件传输工具&#xff0c;它的使用方式与ftp类似&#xff0c;但它使用ssh作为底层传输协议&#xff0c;所以安全性比ftp要好得多。 常用方式 格式&#xff1a;sftp <host> 通过sftp连接<host>&am…

sockjs.js:1609 GET http://192.168.1.119:8080/sockjs-node/info?t=1617976777339 net::ERR_CONNECTION_TI

今天拿到Macbook pro M1芯片 的新机器&#xff0c;迫不及待入坑&#xff0c;配置homebrew的时候&#xff0c;就够我喝好几壶了。 配置完以后赶紧安装好不常用的svn&#xff08;公司使用这个版本管理工具&#xff09;&#xff0c;又赶紧配置好前后端分离的开发的环境&#xff0…

fatal: unable to access ‘https://github.comxxxxxxxxxxx‘: Failed to connect to xxxxxxxxxxxxx

git clone 遇到问题&#xff1a;fatal: unable to access https://github.comxxxxxxxxxxx: Failed to connect to xxxxxxxxxxxxx 将命令行里的http改为git重新执行。

[css] 使用sass的方式有哪些?

[css] 使用sass的方式有哪些&#xff1f; 得编译&#xff0c;有的项目中可以用<style type"sass"> 来使用&#xff08;也得编译&#xff09; 记不清楚是不是了个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定…

oracle修改表字段

create table test1(id number,name varchar2(20) )--修改表字段类型 alter table test1 modify(id varchar2(30),name char(10) default 111 )--追加字段 alter table test1 add(id number primary key )--修改列名 alter table test1 rename column id to id1--删除字段 alte…

[css] 你对伪类了解多少?分为几大类?

[css] 你对伪类了解多少&#xff1f;分为几大类&#xff1f; :hover ::after ::before :nth-child :nth-of-child :first-child :last-child 总结分为两类&#xff1a;页面节点效果操作和获取指定元素选择器 小渣渣一枚&#xff0c;只能写几个出来。个人简介 我是歌谣&#x…

解决 git pull 报错 fatal: refusing to merge unrelated histories

我在Github新建一个仓库&#xff0c;写了License&#xff0c;然后把本地一个写了很久仓库上传。 先pull&#xff0c;因为两个仓库不同&#xff0c;发现refusing to merge unrelated histories&#xff0c;无法pull 因为他们是两个不同的项目&#xff0c;要把两个不同的项目合并…

[css] 分析比较opacity: 0、visibility: hidden、display: none三者的优劣和适用场景

[css] 分析比较opacity: 0、visibility: hidden、display: none三者的优劣和适用场景 opacity 0: 单纯视觉效果&#xff0c;除了看不见&#xff0c;其他都正常。 visibility: hidden: 可继承也可覆盖。 display: none: 元素不会渲染&#xff0c;不影响布局&#xff0c;不会被c…

[css] 你知道什么是CSS-in-JS吗?说说你对它的了解

[css] 你知道什么是CSS-in-JS吗&#xff1f;说说你对它的了解 有好多种呀&#xff0c;只能列几个我知道的了const styles {color: red, };return <div style{styles} /> // index.module.css .x { color: red }// index.js import styles from ./index.module.css; ret…

[css] 如何让一个块元素绝对居中?

[css] 如何让一个块元素绝对居中&#xff1f; div{ position:fixed; right:0; left:0; bottom:0; top:0; margin: auto auto }个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

0065-数方块

题目 数方块难度级别&#xff1a;A&#xff1b; 运行时间限制&#xff1a;1000ms&#xff1b; 运行空间限制&#xff1a;51200KB&#xff1b; 代码长度限制&#xff1a;2000000B 试题描述在墙角堆放着一堆完全相同的正方体小木块&#xff0c;如下图所示&#xff1a; 因为木块堆…

[css] css的user-select:all 有什么用处?

[css] css的user-select:all 有什么用处&#xff1f; none&#xff1a; 文本不能被选择 text&#xff1a; 可以选择文本 all&#xff1a; 当所有内容作为一个整体时可以被选择。如果双击或者在上下文上点击子元素&#xff0c;那么被选择的部分将是以该子元素向上回溯的最高祖先…